• Home
  • Raw
  • Download

Lines Matching refs:lcd

104 static int corgi_ssp_lcdtg_send(struct corgi_lcd *lcd, int reg, uint8_t val);
115 static void lcdtg_ssp_i2c_send(struct corgi_lcd *lcd, uint8_t data) in lcdtg_ssp_i2c_send() argument
117 corgi_ssp_lcdtg_send(lcd, POWERREG0_ADRS, data); in lcdtg_ssp_i2c_send()
121 static void lcdtg_i2c_send_bit(struct corgi_lcd *lcd, uint8_t data) in lcdtg_i2c_send_bit() argument
123 lcdtg_ssp_i2c_send(lcd, data); in lcdtg_i2c_send_bit()
124 lcdtg_ssp_i2c_send(lcd, data | POWER0_COM_DCLK); in lcdtg_i2c_send_bit()
125 lcdtg_ssp_i2c_send(lcd, data); in lcdtg_i2c_send_bit()
128 static void lcdtg_i2c_send_start(struct corgi_lcd *lcd, uint8_t base) in lcdtg_i2c_send_start() argument
130 lcdtg_ssp_i2c_send(lcd, base | POWER0_COM_DCLK | POWER0_COM_DOUT); in lcdtg_i2c_send_start()
131 lcdtg_ssp_i2c_send(lcd, base | POWER0_COM_DCLK); in lcdtg_i2c_send_start()
132 lcdtg_ssp_i2c_send(lcd, base); in lcdtg_i2c_send_start()
135 static void lcdtg_i2c_send_stop(struct corgi_lcd *lcd, uint8_t base) in lcdtg_i2c_send_stop() argument
137 lcdtg_ssp_i2c_send(lcd, base); in lcdtg_i2c_send_stop()
138 lcdtg_ssp_i2c_send(lcd, base | POWER0_COM_DCLK); in lcdtg_i2c_send_stop()
139 lcdtg_ssp_i2c_send(lcd, base | POWER0_COM_DCLK | POWER0_COM_DOUT); in lcdtg_i2c_send_stop()
142 static void lcdtg_i2c_send_byte(struct corgi_lcd *lcd, in lcdtg_i2c_send_byte() argument
148 lcdtg_i2c_send_bit(lcd, base | POWER0_COM_DOUT); in lcdtg_i2c_send_byte()
150 lcdtg_i2c_send_bit(lcd, base); in lcdtg_i2c_send_byte()
155 static void lcdtg_i2c_wait_ack(struct corgi_lcd *lcd, uint8_t base) in lcdtg_i2c_wait_ack() argument
157 lcdtg_i2c_send_bit(lcd, base); in lcdtg_i2c_wait_ack()
160 static void lcdtg_set_common_voltage(struct corgi_lcd *lcd, in lcdtg_set_common_voltage() argument
164 lcdtg_i2c_send_start(lcd, base_data); in lcdtg_set_common_voltage()
165 lcdtg_i2c_send_byte(lcd, base_data, 0x9c); in lcdtg_set_common_voltage()
166 lcdtg_i2c_wait_ack(lcd, base_data); in lcdtg_set_common_voltage()
167 lcdtg_i2c_send_byte(lcd, base_data, 0x00); in lcdtg_set_common_voltage()
168 lcdtg_i2c_wait_ack(lcd, base_data); in lcdtg_set_common_voltage()
169 lcdtg_i2c_send_byte(lcd, base_data, data); in lcdtg_set_common_voltage()
170 lcdtg_i2c_wait_ack(lcd, base_data); in lcdtg_set_common_voltage()
171 lcdtg_i2c_send_stop(lcd, base_data); in lcdtg_set_common_voltage()
174 static int corgi_ssp_lcdtg_send(struct corgi_lcd *lcd, int adrs, uint8_t data) in corgi_ssp_lcdtg_send() argument
180 .tx_buf = lcd->buf, in corgi_ssp_lcdtg_send()
183 lcd->buf[0] = ((adrs & 0x07) << 5) | (data & 0x1f); in corgi_ssp_lcdtg_send()
187 return spi_sync(lcd->spi_dev, &msg); in corgi_ssp_lcdtg_send()
191 static void lcdtg_set_phadadj(struct corgi_lcd *lcd, int mode) in lcdtg_set_phadadj() argument
209 corgi_ssp_lcdtg_send(lcd, PHACTRL_ADRS, adj); in lcdtg_set_phadadj()
212 static void corgi_lcd_power_on(struct corgi_lcd *lcd) in corgi_lcd_power_on() argument
217 corgi_ssp_lcdtg_send(lcd, PICTRL_ADRS, in corgi_lcd_power_on()
222 corgi_ssp_lcdtg_send(lcd, POWERREG0_ADRS, in corgi_lcd_power_on()
226 corgi_ssp_lcdtg_send(lcd, POWERREG1_ADRS, in corgi_lcd_power_on()
230 corgi_ssp_lcdtg_send(lcd, POWERREG1_ADRS, in corgi_lcd_power_on()
235 corgi_ssp_lcdtg_send(lcd, POWERREG0_ADRS, in corgi_lcd_power_on()
241 corgi_ssp_lcdtg_send(lcd, PICTRL_ADRS, in corgi_lcd_power_on()
249 lcdtg_set_common_voltage(lcd, POWER0_DAC_ON | POWER0_COM_OFF | in corgi_lcd_power_on()
253 corgi_ssp_lcdtg_send(lcd, POWERREG0_ADRS, in corgi_lcd_power_on()
258 corgi_ssp_lcdtg_send(lcd, POWERREG1_ADRS, in corgi_lcd_power_on()
263 corgi_ssp_lcdtg_send(lcd, PICTRL_ADRS, PICTRL_INIT_STATE); in corgi_lcd_power_on()
266 corgi_ssp_lcdtg_send(lcd, POWERREG0_ADRS, in corgi_lcd_power_on()
271 corgi_ssp_lcdtg_send(lcd, POWERREG1_ADRS, in corgi_lcd_power_on()
275 corgi_ssp_lcdtg_send(lcd, PICTRL_ADRS, 0); in corgi_lcd_power_on()
278 lcdtg_set_phadadj(lcd, lcd->mode); in corgi_lcd_power_on()
281 corgi_ssp_lcdtg_send(lcd, POLCTRL_ADRS, in corgi_lcd_power_on()
287 switch (lcd->mode) { in corgi_lcd_power_on()
289 corgi_ssp_lcdtg_send(lcd, RESCTL_ADRS, RESCTL_VGA); in corgi_lcd_power_on()
293 corgi_ssp_lcdtg_send(lcd, RESCTL_ADRS, RESCTL_QVGA); in corgi_lcd_power_on()
298 static void corgi_lcd_power_off(struct corgi_lcd *lcd) in corgi_lcd_power_off() argument
304 corgi_ssp_lcdtg_send(lcd, POWERREG1_ADRS, in corgi_lcd_power_off()
308 corgi_ssp_lcdtg_send(lcd, PICTRL_ADRS, PICTRL_COM_SIGNAL_OFF); in corgi_lcd_power_off()
309 corgi_ssp_lcdtg_send(lcd, POWERREG0_ADRS, in corgi_lcd_power_off()
313 lcdtg_set_common_voltage(lcd, POWER0_DAC_ON | POWER0_COM_OFF | in corgi_lcd_power_off()
317 corgi_ssp_lcdtg_send(lcd, POWERREG1_ADRS, in corgi_lcd_power_off()
321 corgi_ssp_lcdtg_send(lcd, POWERREG0_ADRS, in corgi_lcd_power_off()
325 corgi_ssp_lcdtg_send(lcd, PICTRL_ADRS, in corgi_lcd_power_off()
330 corgi_ssp_lcdtg_send(lcd, POWERREG0_ADRS, in corgi_lcd_power_off()
334 corgi_ssp_lcdtg_send(lcd, POWERREG1_ADRS, in corgi_lcd_power_off()
340 struct corgi_lcd *lcd = lcd_get_data(ld); in corgi_lcd_set_mode() local
346 if (lcd->mode == mode) in corgi_lcd_set_mode()
349 lcdtg_set_phadadj(lcd, mode); in corgi_lcd_set_mode()
353 corgi_ssp_lcdtg_send(lcd, RESCTL_ADRS, RESCTL_VGA); in corgi_lcd_set_mode()
357 corgi_ssp_lcdtg_send(lcd, RESCTL_ADRS, RESCTL_QVGA); in corgi_lcd_set_mode()
361 lcd->mode = mode; in corgi_lcd_set_mode()
367 struct corgi_lcd *lcd = lcd_get_data(ld); in corgi_lcd_set_power() local
369 if (POWER_IS_ON(power) && !POWER_IS_ON(lcd->power)) in corgi_lcd_set_power()
370 corgi_lcd_power_on(lcd); in corgi_lcd_set_power()
372 if (!POWER_IS_ON(power) && POWER_IS_ON(lcd->power)) in corgi_lcd_set_power()
373 corgi_lcd_power_off(lcd); in corgi_lcd_set_power()
375 lcd->power = power; in corgi_lcd_set_power()
381 struct corgi_lcd *lcd = lcd_get_data(ld); in corgi_lcd_get_power() local
383 return lcd->power; in corgi_lcd_get_power()
394 struct corgi_lcd *lcd = bl_get_data(bd); in corgi_bl_get_intensity() local
396 return lcd->intensity; in corgi_bl_get_intensity()
399 static int corgi_bl_set_intensity(struct corgi_lcd *lcd, int intensity) in corgi_bl_set_intensity() argument
406 corgi_ssp_lcdtg_send(lcd, DUTYCTRL_ADRS, intensity); in corgi_bl_set_intensity()
409 cont = !!(intensity & 0x20) ^ lcd->gpio_backlight_cont_inverted; in corgi_bl_set_intensity()
411 if (gpio_is_valid(lcd->gpio_backlight_cont)) in corgi_bl_set_intensity()
412 gpio_set_value_cansleep(lcd->gpio_backlight_cont, cont); in corgi_bl_set_intensity()
414 if (gpio_is_valid(lcd->gpio_backlight_on)) in corgi_bl_set_intensity()
415 gpio_set_value_cansleep(lcd->gpio_backlight_on, intensity); in corgi_bl_set_intensity()
417 if (lcd->kick_battery) in corgi_bl_set_intensity()
418 lcd->kick_battery(); in corgi_bl_set_intensity()
420 lcd->intensity = intensity; in corgi_bl_set_intensity()
426 struct corgi_lcd *lcd = bl_get_data(bd); in corgi_bl_update_status() local
438 if ((corgibl_flags & CORGIBL_BATTLOW) && intensity > lcd->limit_mask) in corgi_bl_update_status()
439 intensity = lcd->limit_mask; in corgi_bl_update_status()
441 return corgi_bl_set_intensity(lcd, intensity); in corgi_bl_update_status()
463 struct corgi_lcd *lcd = dev_get_drvdata(dev); in corgi_lcd_suspend() local
466 corgi_bl_set_intensity(lcd, 0); in corgi_lcd_suspend()
467 corgi_lcd_set_power(lcd->lcd_dev, FB_BLANK_POWERDOWN); in corgi_lcd_suspend()
473 struct corgi_lcd *lcd = dev_get_drvdata(dev); in corgi_lcd_resume() local
476 corgi_lcd_set_power(lcd->lcd_dev, FB_BLANK_UNBLANK); in corgi_lcd_resume()
477 backlight_update_status(lcd->bl_dev); in corgi_lcd_resume()
484 static int setup_gpio_backlight(struct corgi_lcd *lcd, in setup_gpio_backlight() argument
487 struct spi_device *spi = lcd->spi_dev; in setup_gpio_backlight()
490 lcd->gpio_backlight_on = -1; in setup_gpio_backlight()
491 lcd->gpio_backlight_cont = -1; in setup_gpio_backlight()
503 lcd->gpio_backlight_on = pdata->gpio_backlight_on; in setup_gpio_backlight()
504 gpio_direction_output(lcd->gpio_backlight_on, 0); in setup_gpio_backlight()
517 lcd->gpio_backlight_cont = pdata->gpio_backlight_cont; in setup_gpio_backlight()
522 if (gpio_is_valid(lcd->gpio_backlight_on)) { in setup_gpio_backlight()
523 lcd->gpio_backlight_cont_inverted = 1; in setup_gpio_backlight()
524 gpio_direction_output(lcd->gpio_backlight_cont, 1); in setup_gpio_backlight()
526 lcd->gpio_backlight_cont_inverted = 0; in setup_gpio_backlight()
527 gpio_direction_output(lcd->gpio_backlight_cont, 0); in setup_gpio_backlight()
537 struct corgi_lcd *lcd; in corgi_lcd_probe() local
545 lcd = devm_kzalloc(&spi->dev, sizeof(struct corgi_lcd), GFP_KERNEL); in corgi_lcd_probe()
546 if (!lcd) { in corgi_lcd_probe()
551 lcd->spi_dev = spi; in corgi_lcd_probe()
553 lcd->lcd_dev = lcd_device_register("corgi_lcd", &spi->dev, in corgi_lcd_probe()
554 lcd, &corgi_lcd_ops); in corgi_lcd_probe()
555 if (IS_ERR(lcd->lcd_dev)) in corgi_lcd_probe()
556 return PTR_ERR(lcd->lcd_dev); in corgi_lcd_probe()
558 lcd->power = FB_BLANK_POWERDOWN; in corgi_lcd_probe()
559 lcd->mode = (pdata) ? pdata->init_mode : CORGI_LCD_MODE_VGA; in corgi_lcd_probe()
564 lcd->bl_dev = backlight_device_register("corgi_bl", &spi->dev, lcd, in corgi_lcd_probe()
566 if (IS_ERR(lcd->bl_dev)) { in corgi_lcd_probe()
567 ret = PTR_ERR(lcd->bl_dev); in corgi_lcd_probe()
570 lcd->bl_dev->props.brightness = pdata->default_intensity; in corgi_lcd_probe()
571 lcd->bl_dev->props.power = FB_BLANK_UNBLANK; in corgi_lcd_probe()
573 ret = setup_gpio_backlight(lcd, pdata); in corgi_lcd_probe()
577 lcd->kick_battery = pdata->kick_battery; in corgi_lcd_probe()
579 spi_set_drvdata(spi, lcd); in corgi_lcd_probe()
580 corgi_lcd_set_power(lcd->lcd_dev, FB_BLANK_UNBLANK); in corgi_lcd_probe()
581 backlight_update_status(lcd->bl_dev); in corgi_lcd_probe()
583 lcd->limit_mask = pdata->limit_mask; in corgi_lcd_probe()
584 the_corgi_lcd = lcd; in corgi_lcd_probe()
588 backlight_device_unregister(lcd->bl_dev); in corgi_lcd_probe()
590 lcd_device_unregister(lcd->lcd_dev); in corgi_lcd_probe()
596 struct corgi_lcd *lcd = spi_get_drvdata(spi); in corgi_lcd_remove() local
598 lcd->bl_dev->props.power = FB_BLANK_UNBLANK; in corgi_lcd_remove()
599 lcd->bl_dev->props.brightness = 0; in corgi_lcd_remove()
600 backlight_update_status(lcd->bl_dev); in corgi_lcd_remove()
601 backlight_device_unregister(lcd->bl_dev); in corgi_lcd_remove()
603 corgi_lcd_set_power(lcd->lcd_dev, FB_BLANK_POWERDOWN); in corgi_lcd_remove()
604 lcd_device_unregister(lcd->lcd_dev); in corgi_lcd_remove()