Lines Matching +full:lcd +full:- +full:controller
1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * Driver for the Himax HX-8357 LCD Controller
9 #include <linux/lcd.h>
217 struct hx8357_data *lcd = lcd_get_data(lcdev); in hx8357_spi_write_then_read() local
232 return -ENOMEM; in hx8357_spi_write_then_read()
253 ret = spi_sync(lcd->spi, &msg); in hx8357_spi_write_then_read()
255 dev_err(&lcdev->dev, "Couldn't send SPI data\n"); in hx8357_spi_write_then_read()
290 * The controller needs 120ms when entering in sleep mode before we can in hx8357_enter_standby()
307 * The controller needs 120ms when exiting from sleep mode before we in hx8357_exit_standby()
321 struct hx8357_data *lcd = lcd_get_data(lcdev); in hx8357_lcd_reset() local
324 gpio_set_value(lcd->reset, 1); in hx8357_lcd_reset()
326 gpio_set_value(lcd->reset, 0); in hx8357_lcd_reset()
328 gpio_set_value(lcd->reset, 1); in hx8357_lcd_reset()
330 /* The controller needs 120ms to recover from reset */ in hx8357_lcd_reset()
336 struct hx8357_data *lcd = lcd_get_data(lcdev); in hx8357_lcd_init() local
343 if (lcd->use_im_pins) { in hx8357_lcd_init()
344 gpio_set_value_cansleep(lcd->im_pins[0], 1); in hx8357_lcd_init()
345 gpio_set_value_cansleep(lcd->im_pins[1], 0); in hx8357_lcd_init()
346 gpio_set_value_cansleep(lcd->im_pins[2], 1); in hx8357_lcd_init()
429 * The controller needs 120ms to fully recover from exiting sleep mode in hx8357_lcd_init()
491 * The controller needs 120ms to fully recover from exiting sleep mode in hx8369_lcd_init()
540 struct hx8357_data *lcd = lcd_get_data(lcdev); in hx8357_set_power() local
543 if (POWER_IS_ON(power) && !POWER_IS_ON(lcd->state)) in hx8357_set_power()
545 else if (!POWER_IS_ON(power) && POWER_IS_ON(lcd->state)) in hx8357_set_power()
549 lcd->state = power; in hx8357_set_power()
551 dev_warn(&lcdev->dev, "failed to set power mode %d\n", power); in hx8357_set_power()
558 struct hx8357_data *lcd = lcd_get_data(lcdev); in hx8357_get_power() local
560 return lcd->state; in hx8357_get_power()
584 struct hx8357_data *lcd; in hx8357_probe() local
588 lcd = devm_kzalloc(&spi->dev, sizeof(*lcd), GFP_KERNEL); in hx8357_probe()
589 if (!lcd) in hx8357_probe()
590 return -ENOMEM; in hx8357_probe()
594 dev_err(&spi->dev, "SPI setup failed.\n"); in hx8357_probe()
598 lcd->spi = spi; in hx8357_probe()
600 match = of_match_device(hx8357_dt_ids, &spi->dev); in hx8357_probe()
601 if (!match || !match->data) in hx8357_probe()
602 return -EINVAL; in hx8357_probe()
604 lcd->reset = of_get_named_gpio(spi->dev.of_node, "gpios-reset", 0); in hx8357_probe()
605 if (!gpio_is_valid(lcd->reset)) { in hx8357_probe()
606 dev_err(&spi->dev, "Missing dt property: gpios-reset\n"); in hx8357_probe()
607 return -EINVAL; in hx8357_probe()
610 ret = devm_gpio_request_one(&spi->dev, lcd->reset, in hx8357_probe()
612 "hx8357-reset"); in hx8357_probe()
614 dev_err(&spi->dev, in hx8357_probe()
616 lcd->reset, ret); in hx8357_probe()
617 return -EINVAL; in hx8357_probe()
620 if (of_find_property(spi->dev.of_node, "im-gpios", NULL)) { in hx8357_probe()
621 lcd->use_im_pins = 1; in hx8357_probe()
624 lcd->im_pins[i] = of_get_named_gpio(spi->dev.of_node, in hx8357_probe()
625 "im-gpios", i); in hx8357_probe()
626 if (lcd->im_pins[i] == -EPROBE_DEFER) { in hx8357_probe()
627 dev_info(&spi->dev, "GPIO requested is not here yet, deferring the probe\n"); in hx8357_probe()
628 return -EPROBE_DEFER; in hx8357_probe()
630 if (!gpio_is_valid(lcd->im_pins[i])) { in hx8357_probe()
631 dev_err(&spi->dev, "Missing dt property: im-gpios\n"); in hx8357_probe()
632 return -EINVAL; in hx8357_probe()
635 ret = devm_gpio_request_one(&spi->dev, lcd->im_pins[i], in hx8357_probe()
639 dev_err(&spi->dev, "failed to request gpio %d: %d\n", in hx8357_probe()
640 lcd->im_pins[i], ret); in hx8357_probe()
641 return -EINVAL; in hx8357_probe()
645 lcd->use_im_pins = 0; in hx8357_probe()
648 lcdev = devm_lcd_device_register(&spi->dev, "mxsfb", &spi->dev, lcd, in hx8357_probe()
658 ret = ((int (*)(struct lcd_device *))match->data)(lcdev); in hx8357_probe()
660 dev_err(&spi->dev, "Couldn't initialize panel\n"); in hx8357_probe()
664 dev_info(&spi->dev, "Panel probed\n"); in hx8357_probe()
679 MODULE_AUTHOR("Maxime Ripard <maxime.ripard@free-electrons.com>");
680 MODULE_DESCRIPTION("Himax HX-8357 LCD Driver");