/** * @ingroup SPI-LCD * * @param device_info */ void bw_spi_lcd_cls(const device_info_t *device_info) { char cmd[] = { (char) 0x00, (char) BW_PORT_WRITE_CLEAR_SCREEN, (char) ' ' }; cmd[0] = (char) device_info->slave_address; lcd_spi_setup(device_info); FUNC_PREFIX(spi_writenb(cmd, sizeof(cmd) / sizeof(cmd[0]))); udelay(BW_LCD_SPI_BYTE_WAIT_US); }
/** * @ingroup SPI-LCD * * @param device_info * @param line * @param pos */ void bw_spi_lcd_set_cursor(const device_info_t *device_info, const uint8_t line, const uint8_t pos) { char cmd[] = { (char) 0x00, (char) BW_PORT_WRITE_MOVE_CURSOR, (char) 0x00 }; cmd[0] = (char) device_info->slave_address; cmd[2] = (char) (((line & 0x03) << 5) | (pos & 0x1f)); lcd_spi_setup(device_info); FUNC_PREFIX(spi_writenb(cmd, sizeof(cmd) / sizeof(cmd[0]))); udelay(BW_LCD_SPI_BYTE_WAIT_US); }
/** * @ingroup SPI-LCD * * @param device_info * @param value */ void bw_spi_lcd_get_contrast(const device_info_t *device_info, uint8_t *value) { char cmd[] = { (char) 0x00, (char) BW_PORT_READ_CURRENT_CONTRAST, (char) 0x00 }; cmd[0] = (char) (device_info->slave_address | 1); lcd_spi_setup(device_info); FUNC_PREFIX(spi_transfern(cmd, sizeof(cmd) / sizeof(char))); udelay(BW_LCD_SPI_BYTE_WAIT_US); *value = (uint8_t)cmd[2]; }
/** * @ingroup SPI-LCD * * @param device_info * @param value */ void bw_spi_lcd_set_backlight(const device_info_t *device_info, const uint8_t value) { char cmd[] = { (char) 0x00, (char) BW_PORT_WRITE_SET_BACKLIGHT, (char) 0x00 }; cmd[0] = (char) device_info->slave_address; cmd[2] = (char) value; lcd_spi_setup(device_info); FUNC_PREFIX(spi_writenb(cmd, sizeof(cmd) / sizeof(cmd[0]))); udelay(BW_LCD_SPI_BYTE_WAIT_US); }
/** * @ingroup SPI-LCD * * @param device_info * @param text * @param length */ void bw_spi_lcd_text(const device_info_t *device_info, const char *text, uint8_t length) { char data[BW_LCD_MAX_CHARACTERS + 2]; uint8_t i; data[0] = (char) device_info->slave_address; data[1] = (char) BW_PORT_WRITE_DISPLAY_DATA; if (length > BW_LCD_MAX_CHARACTERS) length = BW_LCD_MAX_CHARACTERS; for (i = 0; i < length; i++) data[i + 2] = text[i]; lcd_spi_setup(device_info); FUNC_PREFIX(spi_writenb(data, length + 2)); udelay(BW_LCD_SPI_BYTE_WAIT_US); }
/*! * This function is called whenever the SPI slave device is detected. * * @param spi the SPI slave device * * @return Returns 0 on SUCCESS and error on FAILURE. */ static int __devinit lcd_spi_probe(struct spi_device *spi) { int i; struct mxc_lcd_platform_data *plat = spi->dev.platform_data; lcd_spi = spi; lcd_24bpp_ioinit(); if (plat) { io_reg = regulator_get(&spi->dev, plat->io_reg); if (!IS_ERR(io_reg)) { regulator_set_voltage(io_reg, 1800000); regulator_enable(io_reg); } core_reg = regulator_get(&spi->dev, plat->core_reg); if (!IS_ERR(core_reg)) { regulator_set_voltage(core_reg, 2800000); regulator_enable(core_reg); } lcd_reset = plat->reset; if (lcd_reset) lcd_reset(); } lcd_spi_setup(lcd_spi); for (i = 0; i < num_registered_fb; i++) { if (strcmp(registered_fb[i]->fix.id, "DISP3 BG") == 0) { lcd_init_fb(registered_fb[i]); fb_show_logo(registered_fb[i], 0); lcd_poweron(); } } fb_register_client(&nb); return 0; }