Merge tag 'backlight-next-6.9' of git://git.kernel.org/pub/scm/linux/kernel/git/lee...
[linux-2.6-microblaze.git] / drivers / video / backlight / hx8357.c
index d729837..339d912 100644 (file)
@@ -8,9 +8,9 @@
 #include <linux/delay.h>
 #include <linux/gpio/consumer.h>
 #include <linux/lcd.h>
+#include <linux/mod_devicetable.h>
 #include <linux/module.h>
-#include <linux/of.h>
-#include <linux/of_device.h>
+#include <linux/property.h>
 #include <linux/spi/spi.h>
 
 #define HX8357_NUM_IM_PINS     3
@@ -564,41 +564,28 @@ static struct lcd_ops hx8357_ops = {
        .get_power      = hx8357_get_power,
 };
 
-static const struct of_device_id hx8357_dt_ids[] = {
-       {
-               .compatible = "himax,hx8357",
-               .data = hx8357_lcd_init,
-       },
-       {
-               .compatible = "himax,hx8369",
-               .data = hx8369_lcd_init,
-       },
-       {},
-};
-MODULE_DEVICE_TABLE(of, hx8357_dt_ids);
+typedef int (*hx8357_init_fn)(struct lcd_device *);
 
 static int hx8357_probe(struct spi_device *spi)
 {
        struct device *dev = &spi->dev;
        struct lcd_device *lcdev;
        struct hx8357_data *lcd;
-       const struct of_device_id *match;
+       hx8357_init_fn init_fn;
        int i, ret;
 
-       lcd = devm_kzalloc(&spi->dev, sizeof(*lcd), GFP_KERNEL);
+       lcd = devm_kzalloc(dev, sizeof(*lcd), GFP_KERNEL);
        if (!lcd)
                return -ENOMEM;
 
        ret = spi_setup(spi);
-       if (ret < 0) {
-               dev_err(&spi->dev, "SPI setup failed.\n");
-               return ret;
-       }
+       if (ret < 0)
+               return dev_err_probe(dev, ret, "SPI setup failed.\n");
 
        lcd->spi = spi;
 
-       match = of_match_device(hx8357_dt_ids, &spi->dev);
-       if (!match || !match->data)
+       init_fn = device_get_match_data(dev);
+       if (!init_fn)
                return -EINVAL;
 
        lcd->reset = devm_gpiod_get(dev, "reset", GPIOD_OUT_LOW);
@@ -609,14 +596,15 @@ static int hx8357_probe(struct spi_device *spi)
        lcd->im_pins = devm_gpiod_get_array_optional(dev, "im", GPIOD_OUT_LOW);
        if (IS_ERR(lcd->im_pins))
                return dev_err_probe(dev, PTR_ERR(lcd->im_pins), "failed to request im GPIOs\n");
-       if (lcd->im_pins->ndescs < HX8357_NUM_IM_PINS)
-               return dev_err_probe(dev, -EINVAL, "not enough im GPIOs\n");
+       if (lcd->im_pins) {
+               if (lcd->im_pins->ndescs < HX8357_NUM_IM_PINS)
+                       return dev_err_probe(dev, -EINVAL, "not enough im GPIOs\n");
 
-       for (i = 0; i < HX8357_NUM_IM_PINS; i++)
-               gpiod_set_consumer_name(lcd->im_pins->desc[i], "im_pins");
+               for (i = 0; i < HX8357_NUM_IM_PINS; i++)
+                       gpiod_set_consumer_name(lcd->im_pins->desc[i], "im_pins");
+       }
 
-       lcdev = devm_lcd_device_register(&spi->dev, "mxsfb", &spi->dev, lcd,
-                                       &hx8357_ops);
+       lcdev = devm_lcd_device_register(dev, "mxsfb", dev, lcd, &hx8357_ops);
        if (IS_ERR(lcdev)) {
                ret = PTR_ERR(lcdev);
                return ret;
@@ -625,17 +613,28 @@ static int hx8357_probe(struct spi_device *spi)
 
        hx8357_lcd_reset(lcdev);
 
-       ret = ((int (*)(struct lcd_device *))match->data)(lcdev);
-       if (ret) {
-               dev_err(&spi->dev, "Couldn't initialize panel\n");
-               return ret;
-       }
+       ret = init_fn(lcdev);
+       if (ret)
+               return dev_err_probe(dev, ret, "Couldn't initialize panel\n");
 
-       dev_info(&spi->dev, "Panel probed\n");
+       dev_info(dev, "Panel probed\n");
 
        return 0;
 }
 
+static const struct of_device_id hx8357_dt_ids[] = {
+       {
+               .compatible = "himax,hx8357",
+               .data = hx8357_lcd_init,
+       },
+       {
+               .compatible = "himax,hx8369",
+               .data = hx8369_lcd_init,
+       },
+       {}
+};
+MODULE_DEVICE_TABLE(of, hx8357_dt_ids);
+
 static struct spi_driver hx8357_driver = {
        .probe  = hx8357_probe,
        .driver = {