OSDN Git Service

Merge tag 'backlight-next-5.7' of git://git.kernel.org/pub/scm/linux/kernel/git/lee...
authorLinus Torvalds <torvalds@linux-foundation.org>
Wed, 8 Apr 2020 02:44:52 +0000 (19:44 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Wed, 8 Apr 2020 02:44:52 +0000 (19:44 -0700)
Pull backlight updates from Lee Jones:
 "Switch pwm_bl and corgi_lcd drivers to use GPIO descriptors"

* tag 'backlight-next-5.7' of git://git.kernel.org/pub/scm/linux/kernel/git/lee/backlight:
  backlight: corgi: Convert to use GPIO descriptors
  backlight: pwm_bl: Switch to full GPIO descriptor

30 files changed:
arch/arm/mach-pxa/cm-x300.c
arch/arm/mach-pxa/colibri-pxa270-income.c
arch/arm/mach-pxa/corgi.c
arch/arm/mach-pxa/ezx.c
arch/arm/mach-pxa/hx4700.c
arch/arm/mach-pxa/lpd270.c
arch/arm/mach-pxa/magician.c
arch/arm/mach-pxa/mainstone.c
arch/arm/mach-pxa/mioa701.c
arch/arm/mach-pxa/palm27x.c
arch/arm/mach-pxa/palmtc.c
arch/arm/mach-pxa/palmte2.c
arch/arm/mach-pxa/pcm990-baseboard.c
arch/arm/mach-pxa/spitz.c
arch/arm/mach-pxa/tavorevb.c
arch/arm/mach-pxa/viper.c
arch/arm/mach-pxa/z2.c
arch/arm/mach-pxa/zylonite.c
arch/arm/mach-s3c24xx/mach-h1940.c
arch/arm/mach-s3c24xx/mach-rx1950.c
arch/arm/mach-s3c64xx/dev-backlight.c
arch/arm/mach-s3c64xx/mach-crag6410.c
arch/arm/mach-s3c64xx/mach-hmt.c
arch/arm/mach-s3c64xx/mach-smartq.c
arch/arm/mach-s3c64xx/mach-smdk6410.c
arch/unicore32/kernel/puv3-nb0916.c
drivers/video/backlight/corgi_lcd.c
drivers/video/backlight/pwm_bl.c
include/linux/pwm_backlight.h
include/linux/spi/corgi_lcd.h

index 425855f..2e35354 100644 (file)
@@ -312,7 +312,6 @@ static struct pwm_lookup cm_x300_pwm_lookup[] = {
 static struct platform_pwm_backlight_data cm_x300_backlight_data = {
        .max_brightness = 100,
        .dft_brightness = 100,
-       .enable_gpio    = -1,
 };
 
 static struct platform_device cm_x300_backlight_device = {
index dbad2f1..e5879e8 100644 (file)
@@ -202,7 +202,6 @@ static struct pwm_lookup income_pwm_lookup[] = {
 static struct platform_pwm_backlight_data income_backlight_data = {
        .max_brightness = 0x3ff,
        .dft_brightness = 0x1ff,
-       .enable_gpio    = -1,
 };
 
 static struct platform_device income_backlight = {
index f2d7328..593c7f7 100644 (file)
@@ -563,13 +563,20 @@ static void corgi_bl_kick_battery(void)
        }
 }
 
+static struct gpiod_lookup_table corgi_lcdcon_gpio_table = {
+       .dev_id = "spi1.1",
+       .table = {
+               GPIO_LOOKUP("gpio-pxa", CORGI_GPIO_BACKLIGHT_CONT,
+                           "BL_CONT", GPIO_ACTIVE_HIGH),
+               { },
+       },
+};
+
 static struct corgi_lcd_platform_data corgi_lcdcon_info = {
        .init_mode              = CORGI_LCD_MODE_VGA,
        .max_intensity          = 0x2f,
        .default_intensity      = 0x1f,
        .limit_mask             = 0x0b,
-       .gpio_backlight_cont    = CORGI_GPIO_BACKLIGHT_CONT,
-       .gpio_backlight_on      = -1,
        .kick_battery           = corgi_bl_kick_battery,
 };
 
@@ -609,6 +616,7 @@ static struct spi_board_info corgi_spi_devices[] = {
 static void __init corgi_init_spi(void)
 {
        pxa2xx_set_spi_info(1, &corgi_spi_info);
+       gpiod_add_lookup_table(&corgi_lcdcon_gpio_table);
        spi_register_board_info(ARRAY_AND_SIZE(corgi_spi_devices));
 }
 #else
index ec10851..eb85950 100644 (file)
@@ -55,7 +55,6 @@ static struct pwm_lookup ezx_pwm_lookup[] __maybe_unused = {
 static struct platform_pwm_backlight_data ezx_backlight_data = {
        .max_brightness = 1023,
        .dft_brightness = 1023,
-       .enable_gpio    = -1,
 };
 
 static struct platform_device ezx_backlight_device = {
index 238a751..1d4c5db 100644 (file)
@@ -556,7 +556,6 @@ static struct platform_device hx4700_lcd = {
 static struct platform_pwm_backlight_data backlight_data = {
        .max_brightness = 200,
        .dft_brightness = 100,
-       .enable_gpio    = -1,
 };
 
 static struct platform_device backlight = {
index 20e00e9..6fc40bc 100644 (file)
@@ -277,7 +277,6 @@ static struct pwm_lookup lpd270_pwm_lookup[] = {
 static struct platform_pwm_backlight_data lpd270_backlight_data = {
        .max_brightness = 1,
        .dft_brightness = 1,
-       .enable_gpio    = -1,
 };
 
 static struct platform_device lpd270_backlight_device = {
index 5d0591f..cd9fa46 100644 (file)
@@ -401,7 +401,6 @@ static void magician_backlight_exit(struct device *dev)
 static struct platform_pwm_backlight_data backlight_data = {
        .max_brightness = 272,
        .dft_brightness = 100,
-       .enable_gpio    = -1,
        .init           = magician_backlight_init,
        .notify         = magician_backlight_notify,
        .exit           = magician_backlight_exit,
index 1b78829..d1010ec 100644 (file)
@@ -256,7 +256,6 @@ static struct pwm_lookup mainstone_pwm_lookup[] = {
 static struct platform_pwm_backlight_data mainstone_backlight_data = {
        .max_brightness = 1023,
        .dft_brightness = 1023,
-       .enable_gpio    = -1,
 };
 
 static struct platform_device mainstone_backlight_device = {
index 0b8bae9..d3af803 100644 (file)
@@ -176,7 +176,6 @@ static struct pwm_lookup mioa701_pwm_lookup[] = {
 static struct platform_pwm_backlight_data mioa701_backlight_data = {
        .max_brightness = 100,
        .dft_brightness = 50,
-       .enable_gpio    = -1,
 };
 
 /*
index b600b63..0d246a1 100644 (file)
@@ -318,7 +318,6 @@ static void palm27x_backlight_exit(struct device *dev)
 static struct platform_pwm_backlight_data palm27x_backlight_data = {
        .max_brightness = 0xfe,
        .dft_brightness = 0x7e,
-       .enable_gpio    = -1,
        .init           = palm27x_backlight_init,
        .notify         = palm27x_backlight_notify,
        .exit           = palm27x_backlight_exit,
index fda9dea..455cb8c 100644 (file)
@@ -174,6 +174,15 @@ static inline void palmtc_keys_init(void) {}
  * Backlight
  ******************************************************************************/
 #if defined(CONFIG_BACKLIGHT_PWM) || defined(CONFIG_BACKLIGHT_PWM_MODULE)
+
+static struct gpiod_lookup_table palmtc_pwm_bl_gpio_table = {
+       .dev_id = "pwm-backlight.0",
+       .table = {
+               GPIO_LOOKUP("gpio-pxa", GPIO_NR_PALMTC_BL_POWER,
+                           "enable", GPIO_ACTIVE_HIGH),
+       },
+};
+
 static struct pwm_lookup palmtc_pwm_lookup[] = {
        PWM_LOOKUP("pxa25x-pwm.1", 0, "pwm-backlight.0", NULL, PALMTC_PERIOD_NS,
                   PWM_POLARITY_NORMAL),
@@ -182,7 +191,6 @@ static struct pwm_lookup palmtc_pwm_lookup[] = {
 static struct platform_pwm_backlight_data palmtc_backlight_data = {
        .max_brightness = PALMTC_MAX_INTENSITY,
        .dft_brightness = PALMTC_MAX_INTENSITY,
-       .enable_gpio    = GPIO_NR_PALMTC_BL_POWER,
 };
 
 static struct platform_device palmtc_backlight = {
@@ -195,6 +203,7 @@ static struct platform_device palmtc_backlight = {
 
 static void __init palmtc_pwm_init(void)
 {
+       gpiod_add_lookup_table(&palmtc_pwm_bl_gpio_table);
        pwm_add_table(palmtc_pwm_lookup, ARRAY_SIZE(palmtc_pwm_lookup));
        platform_device_register(&palmtc_backlight);
 }
index 7171014..e3bcf58 100644 (file)
@@ -175,7 +175,6 @@ static void palmte2_backlight_exit(struct device *dev)
 static struct platform_pwm_backlight_data palmte2_backlight_data = {
        .max_brightness = PALMTE2_MAX_INTENSITY,
        .dft_brightness = PALMTE2_MAX_INTENSITY,
-       .enable_gpio    = -1,
        .init           = palmte2_backlight_init,
        .notify         = palmte2_backlight_notify,
        .exit           = palmte2_backlight_exit,
index cb1c567..bf613f8 100644 (file)
@@ -154,7 +154,6 @@ static struct pwm_lookup pcm990_pwm_lookup[] = {
 static struct platform_pwm_backlight_data pcm990_backlight_data = {
        .max_brightness = 1023,
        .dft_brightness = 1023,
-       .enable_gpio    = -1,
 };
 
 static struct platform_device pcm990_backlight_device = {
index a4fdc39..371008e 100644 (file)
@@ -525,13 +525,33 @@ static void spitz_bl_kick_battery(void)
        }
 }
 
+static struct gpiod_lookup_table spitz_lcdcon_gpio_table = {
+       .dev_id = "spi2.1",
+       .table = {
+               GPIO_LOOKUP("gpio-pxa", SPITZ_GPIO_BACKLIGHT_CONT,
+                           "BL_CONT", GPIO_ACTIVE_LOW),
+               GPIO_LOOKUP("gpio-pxa", SPITZ_GPIO_BACKLIGHT_ON,
+                           "BL_ON", GPIO_ACTIVE_HIGH),
+               { },
+       },
+};
+
+static struct gpiod_lookup_table akita_lcdcon_gpio_table = {
+       .dev_id = "spi2.1",
+       .table = {
+               GPIO_LOOKUP("gpio-pxa", AKITA_GPIO_BACKLIGHT_CONT,
+                           "BL_CONT", GPIO_ACTIVE_LOW),
+               GPIO_LOOKUP("gpio-pxa", AKITA_GPIO_BACKLIGHT_ON,
+                           "BL_ON", GPIO_ACTIVE_HIGH),
+               { },
+       },
+};
+
 static struct corgi_lcd_platform_data spitz_lcdcon_info = {
        .init_mode              = CORGI_LCD_MODE_VGA,
        .max_intensity          = 0x2f,
        .default_intensity      = 0x1f,
        .limit_mask             = 0x0b,
-       .gpio_backlight_cont    = SPITZ_GPIO_BACKLIGHT_CONT,
-       .gpio_backlight_on      = SPITZ_GPIO_BACKLIGHT_ON,
        .kick_battery           = spitz_bl_kick_battery,
 };
 
@@ -574,12 +594,10 @@ static struct pxa2xx_spi_controller spitz_spi_info = {
 
 static void __init spitz_spi_init(void)
 {
-       struct corgi_lcd_platform_data *lcd_data = &spitz_lcdcon_info;
-
-       if (machine_is_akita()) {
-               lcd_data->gpio_backlight_cont = AKITA_GPIO_BACKLIGHT_CONT;
-               lcd_data->gpio_backlight_on = AKITA_GPIO_BACKLIGHT_ON;
-       }
+       if (machine_is_akita())
+               gpiod_add_lookup_table(&akita_lcdcon_gpio_table);
+       else
+               gpiod_add_lookup_table(&spitz_lcdcon_gpio_table);
 
        pxa2xx_set_spi_info(2, &spitz_spi_info);
        spi_register_board_info(ARRAY_AND_SIZE(spitz_spi_devices));
index 93466fa..a15eb3b 100644 (file)
@@ -178,13 +178,11 @@ static struct platform_pwm_backlight_data tavorevb_backlight_data[] = {
                /* primary backlight */
                .max_brightness = 100,
                .dft_brightness = 100,
-               .enable_gpio    = -1,
        },
        [1] = {
                /* secondary backlight */
                .max_brightness = 100,
                .dft_brightness = 100,
-               .enable_gpio    = -1,
        },
 };
 
index c06031d..3aa34e9 100644 (file)
@@ -404,7 +404,6 @@ static void viper_backlight_exit(struct device *dev)
 static struct platform_pwm_backlight_data viper_backlight_data = {
        .max_brightness = 100,
        .dft_brightness = 100,
-       .enable_gpio    = -1,
        .init           = viper_backlight_init,
        .notify         = viper_backlight_notify,
        .exit           = viper_backlight_exit,
index 900cefc..21fd76b 100644 (file)
@@ -210,13 +210,11 @@ static struct platform_pwm_backlight_data z2_backlight_data[] = {
                /* Keypad Backlight */
                .max_brightness = 1023,
                .dft_brightness = 0,
-               .enable_gpio    = -1,
        },
        [1] = {
                /* LCD Backlight */
                .max_brightness = 1023,
                .dft_brightness = 512,
-               .enable_gpio    = -1,
        },
 };
 
index bf2ab5b..79f0025 100644 (file)
@@ -117,7 +117,6 @@ static struct pwm_lookup zylonite_pwm_lookup[] = {
 static struct platform_pwm_backlight_data zylonite_backlight_data = {
        .max_brightness = 100,
        .dft_brightness = 100,
-       .enable_gpio    = -1,
 };
 
 static struct platform_device zylonite_backlight_device = {
index 74d6b68..e1c372e 100644 (file)
@@ -516,7 +516,6 @@ static void h1940_backlight_exit(struct device *dev)
 static struct platform_pwm_backlight_data backlight_data = {
        .max_brightness = 100,
        .dft_brightness = 50,
-       .enable_gpio    = -1,
        .init           = h1940_backlight_init,
        .notify         = h1940_backlight_notify,
        .exit           = h1940_backlight_exit,
index 03d8f27..fde98b1 100644 (file)
@@ -534,7 +534,6 @@ static int rx1950_backlight_notify(struct device *dev, int brightness)
 static struct platform_pwm_backlight_data rx1950_backlight_data = {
        .max_brightness = 24,
        .dft_brightness = 4,
-       .enable_gpio = -1,
        .init = rx1950_backlight_init,
        .notify = rx1950_backlight_notify,
        .exit = rx1950_backlight_exit,
index 799cfdf..09e6da3 100644 (file)
@@ -65,7 +65,6 @@ static struct samsung_bl_drvdata samsung_dfl_bl_data __initdata = {
        .plat_data = {
                .max_brightness = 255,
                .dft_brightness = 255,
-               .enable_gpio    = -1,
                .init           = samsung_bl_init,
                .exit           = samsung_bl_exit,
        },
@@ -111,8 +110,6 @@ void __init samsung_bl_set(struct samsung_bl_gpio_info *gpio_info,
                samsung_bl_data->dft_brightness = bl_data->dft_brightness;
        if (bl_data->lth_brightness)
                samsung_bl_data->lth_brightness = bl_data->lth_brightness;
-       if (bl_data->enable_gpio >= 0)
-               samsung_bl_data->enable_gpio = bl_data->enable_gpio;
        if (bl_data->init)
                samsung_bl_data->init = bl_data->init;
        if (bl_data->notify)
index 8ec6a4f..da96542 100644 (file)
@@ -114,7 +114,6 @@ static struct pwm_lookup crag6410_pwm_lookup[] = {
 static struct platform_pwm_backlight_data crag6410_backlight_data = {
        .max_brightness = 1000,
        .dft_brightness = 600,
-       .enable_gpio    = -1,
 };
 
 static struct platform_device crag6410_backlight_device = {
index bfe9881..e708021 100644 (file)
@@ -115,7 +115,6 @@ static void hmt_bl_exit(struct device *dev)
 static struct platform_pwm_backlight_data hmt_backlight_data = {
        .max_brightness = 100 * 256,
        .dft_brightness = 40 * 256,
-       .enable_gpio    = -1,
        .init           = hmt_bl_init,
        .notify         = hmt_bl_notify,
        .exit           = hmt_bl_exit,
index 829d5db..5025db6 100644 (file)
@@ -150,7 +150,6 @@ static int smartq_bl_init(struct device *dev)
 static struct platform_pwm_backlight_data smartq_backlight_data = {
        .max_brightness = 1000,
        .dft_brightness = 600,
-       .enable_gpio    = -1,
        .init           = smartq_bl_init,
 };
 
index 908e5aa..56f406c 100644 (file)
@@ -623,7 +623,7 @@ static struct pwm_lookup smdk6410_pwm_lookup[] = {
 };
 
 static struct platform_pwm_backlight_data smdk6410_bl_data = {
-       .enable_gpio = -1,
+       /* Intentionally blank */
 };
 
 static struct dwc2_hsotg_plat smdk6410_hsotg_pdata;
index a3bf2ff..e251f50 100644 (file)
@@ -55,7 +55,6 @@ static struct pwm_lookup nb0916_pwm_lookup[] = {
 static struct platform_pwm_backlight_data nb0916_backlight_data = {
        .max_brightness = 100,
        .dft_brightness = 100,
-       .enable_gpio    = -1,
 };
 
 static struct gpio_keys_button nb0916_gpio_keys[] = {
index 68f7592..25ef0cb 100644 (file)
@@ -15,7 +15,7 @@
 #include <linux/kernel.h>
 #include <linux/init.h>
 #include <linux/delay.h>
-#include <linux/gpio.h>
+#include <linux/gpio/consumer.h>
 #include <linux/fb.h>
 #include <linux/lcd.h>
 #include <linux/spi/spi.h>
@@ -90,9 +90,8 @@ struct corgi_lcd {
        int     mode;
        char    buf[2];
 
-       int     gpio_backlight_on;
-       int     gpio_backlight_cont;
-       int     gpio_backlight_cont_inverted;
+       struct gpio_desc *backlight_on;
+       struct gpio_desc *backlight_cont;
 
        void (*kick_battery)(void);
 };
@@ -403,13 +402,13 @@ static int corgi_bl_set_intensity(struct corgi_lcd *lcd, int intensity)
        corgi_ssp_lcdtg_send(lcd, DUTYCTRL_ADRS, intensity);
 
        /* Bit 5 via GPIO_BACKLIGHT_CONT */
-       cont = !!(intensity & 0x20) ^ lcd->gpio_backlight_cont_inverted;
+       cont = !!(intensity & 0x20);
 
-       if (gpio_is_valid(lcd->gpio_backlight_cont))
-               gpio_set_value_cansleep(lcd->gpio_backlight_cont, cont);
+       if (lcd->backlight_cont)
+               gpiod_set_value_cansleep(lcd->backlight_cont, cont);
 
-       if (gpio_is_valid(lcd->gpio_backlight_on))
-               gpio_set_value_cansleep(lcd->gpio_backlight_on, intensity);
+       if (lcd->backlight_on)
+               gpiod_set_value_cansleep(lcd->backlight_on, intensity);
 
        if (lcd->kick_battery)
                lcd->kick_battery();
@@ -482,48 +481,17 @@ static int setup_gpio_backlight(struct corgi_lcd *lcd,
                                struct corgi_lcd_platform_data *pdata)
 {
        struct spi_device *spi = lcd->spi_dev;
-       int err;
-
-       lcd->gpio_backlight_on = -1;
-       lcd->gpio_backlight_cont = -1;
-
-       if (gpio_is_valid(pdata->gpio_backlight_on)) {
-               err = devm_gpio_request(&spi->dev, pdata->gpio_backlight_on,
-                                       "BL_ON");
-               if (err) {
-                       dev_err(&spi->dev,
-                               "failed to request GPIO%d for backlight_on\n",
-                               pdata->gpio_backlight_on);
-                       return err;
-               }
-
-               lcd->gpio_backlight_on = pdata->gpio_backlight_on;
-               gpio_direction_output(lcd->gpio_backlight_on, 0);
-       }
 
-       if (gpio_is_valid(pdata->gpio_backlight_cont)) {
-               err = devm_gpio_request(&spi->dev, pdata->gpio_backlight_cont,
-                                       "BL_CONT");
-               if (err) {
-                       dev_err(&spi->dev,
-                               "failed to request GPIO%d for backlight_cont\n",
-                               pdata->gpio_backlight_cont);
-                       return err;
-               }
-
-               lcd->gpio_backlight_cont = pdata->gpio_backlight_cont;
-
-               /* spitz and akita use both GPIOs for backlight, and
-                * have inverted polarity of GPIO_BACKLIGHT_CONT
-                */
-               if (gpio_is_valid(lcd->gpio_backlight_on)) {
-                       lcd->gpio_backlight_cont_inverted = 1;
-                       gpio_direction_output(lcd->gpio_backlight_cont, 1);
-               } else {
-                       lcd->gpio_backlight_cont_inverted = 0;
-                       gpio_direction_output(lcd->gpio_backlight_cont, 0);
-               }
-       }
+       lcd->backlight_on = devm_gpiod_get_optional(&spi->dev,
+                                                   "BL_ON", GPIOD_OUT_LOW);
+       if (IS_ERR(lcd->backlight_on))
+               return PTR_ERR(lcd->backlight_on);
+
+       lcd->backlight_cont = devm_gpiod_get_optional(&spi->dev, "BL_CONT",
+                                                     GPIOD_OUT_LOW);
+       if (IS_ERR(lcd->backlight_cont))
+               return PTR_ERR(lcd->backlight_cont);
+
        return 0;
 }
 
index efb4efc..82b8d75 100644 (file)
@@ -7,7 +7,6 @@
 
 #include <linux/delay.h>
 #include <linux/gpio/consumer.h>
-#include <linux/gpio.h>
 #include <linux/module.h>
 #include <linux/kernel.h>
 #include <linux/init.h>
@@ -258,8 +257,6 @@ static int pwm_backlight_parse_dt(struct device *dev,
                             &data->post_pwm_on_delay);
        of_property_read_u32(node, "pwm-off-delay-ms", &data->pwm_off_delay);
 
-       data->enable_gpio = -EINVAL;
-
        /*
         * Determine the number of brightness levels, if this property is not
         * set a default table of brightness levels will be used.
@@ -503,22 +500,6 @@ static int pwm_backlight_probe(struct platform_device *pdev)
        }
 
        /*
-        * Compatibility fallback for drivers still using the integer GPIO
-        * platform data. Must go away soon.
-        */
-       if (!pb->enable_gpio && gpio_is_valid(data->enable_gpio)) {
-               ret = devm_gpio_request_one(&pdev->dev, data->enable_gpio,
-                                           GPIOF_OUT_INIT_HIGH, "enable");
-               if (ret < 0) {
-                       dev_err(&pdev->dev, "failed to request GPIO#%d: %d\n",
-                               data->enable_gpio, ret);
-                       goto err_alloc;
-               }
-
-               pb->enable_gpio = gpio_to_desc(data->enable_gpio);
-       }
-
-       /*
         * If the GPIO is not known to be already configured as output, that
         * is, if gpiod_get_direction returns either 1 or -EINVAL, change the
         * direction to output and set the GPIO as active.
index 8ea265a..06086cb 100644 (file)
@@ -16,8 +16,6 @@ struct platform_pwm_backlight_data {
        unsigned int *levels;
        unsigned int post_pwm_on_delay;
        unsigned int pwm_off_delay;
-       /* TODO remove once all users are switched to gpiod_* API */
-       int enable_gpio;
        int (*init)(struct device *dev);
        int (*notify)(struct device *dev, int brightness);
        void (*notify_after)(struct device *dev, int brightness);
index edf4bec..0b85761 100644 (file)
@@ -11,9 +11,6 @@ struct corgi_lcd_platform_data {
        int     default_intensity;
        int     limit_mask;
 
-       int     gpio_backlight_on;      /* -1 if n/a */
-       int     gpio_backlight_cont;    /* -1 if n/a */
-
        void (*notify)(int intensity);
        void (*kick_battery)(void);
 };