Commit ec5a4565 authored by Hans de Goede's avatar Hans de Goede

platform/x86: x86-android-tablets: Share lp855x_platform_data between different models

Various Lenovo models use a TI LP8557 LED backlight controller and
the necessary platform_data is the same for the different models.

Currently there are 2 identical copies and the upcoming support for
the Lenovo Yoga Book X90F/L would add a 3th identical copy.

Move to sharing the lp855x_platform_data between different models
to avoid this duplication.
Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
Reviewed-by: default avatarAndy Shevchenko <andy.shevchenko@gmail.com>
Link: https://lore.kernel.org/r/20230401150737.597417-2-hdegoede@redhat.com
parent 01862d01
...@@ -24,6 +24,20 @@ ...@@ -24,6 +24,20 @@
#include "shared-psy-info.h" #include "shared-psy-info.h"
#include "x86-android-tablets.h" #include "x86-android-tablets.h"
/*
* Various Lenovo models use a TI LP8557 LED backlight controller with its PWM
* input connected to a PWM output coming from the LCD panel's controller.
* The Android kernels have a hack in the i915 driver to write a non-standard
* panel specific DSI register to set the duty-cycle of the LCD's PWM output.
*
* To avoid having to have a similar hack in the mainline kernel program the
* LP8557 to directly set the level and use the lp855x_bl driver for control.
*/
static struct lp855x_platform_data lenovo_lp8557_pdata = {
.device_control = 0x86,
.initial_brightness = 128,
};
/* Lenovo Yoga Book X91F/L Windows tablet needs manual instantiation of the fg client */ /* Lenovo Yoga Book X91F/L Windows tablet needs manual instantiation of the fg client */
static const struct x86_i2c_client_info lenovo_yogabook_x91_i2c_clients[] __initconst = { static const struct x86_i2c_client_info lenovo_yogabook_x91_i2c_clients[] __initconst = {
{ {
...@@ -72,11 +86,6 @@ static struct x86_gpio_button lenovo_yoga_tab2_830_1050_lid = { ...@@ -72,11 +86,6 @@ static struct x86_gpio_button lenovo_yoga_tab2_830_1050_lid = {
/* This gets filled by lenovo_yoga_tab2_830_1050_init() */ /* This gets filled by lenovo_yoga_tab2_830_1050_init() */
static struct rmi_device_platform_data lenovo_yoga_tab2_830_1050_rmi_pdata = { }; static struct rmi_device_platform_data lenovo_yoga_tab2_830_1050_rmi_pdata = { };
static struct lp855x_platform_data lenovo_yoga_tab2_830_1050_lp8557_pdata = {
.device_control = 0x86,
.initial_brightness = 128,
};
static const struct x86_i2c_client_info lenovo_yoga_tab2_830_1050_i2c_clients[] __initconst = { static const struct x86_i2c_client_info lenovo_yoga_tab2_830_1050_i2c_clients[] __initconst = {
{ {
/* bq24292i battery charger */ /* bq24292i battery charger */
...@@ -125,7 +134,7 @@ static const struct x86_i2c_client_info lenovo_yoga_tab2_830_1050_i2c_clients[] ...@@ -125,7 +134,7 @@ static const struct x86_i2c_client_info lenovo_yoga_tab2_830_1050_i2c_clients[]
.type = "lp8557", .type = "lp8557",
.addr = 0x2c, .addr = 0x2c,
.dev_name = "lp8557", .dev_name = "lp8557",
.platform_data = &lenovo_yoga_tab2_830_1050_lp8557_pdata, .platform_data = &lenovo_lp8557_pdata,
}, },
.adapter_path = "\\_SB_.I2C3", .adapter_path = "\\_SB_.I2C3",
}, },
...@@ -343,20 +352,6 @@ static const struct software_node lenovo_yt3_hideep_ts_node = { ...@@ -343,20 +352,6 @@ static const struct software_node lenovo_yt3_hideep_ts_node = {
.properties = lenovo_yt3_hideep_ts_props, .properties = lenovo_yt3_hideep_ts_props,
}; };
/*
* The YT3 uses an TI LP8557 LED backlight controller, the LP8557's PWM input is
* connected to a PWM output coming from the LCD panel's controller. The Android
* kernel has a hack in the i915 driver to write the non-standard DSI reg 0x51
* with the desired level to set the duty-cycle of the LCD's PWM output.
*
* To avoid having to have a similar hack in the mainline kernel program the
* LP8557 to directly set the level and use the lp855x_bl driver for control.
*/
static struct lp855x_platform_data lenovo_yt3_lp8557_pdata = {
.device_control = 0x86,
.initial_brightness = 128,
};
static const struct x86_i2c_client_info lenovo_yt3_i2c_clients[] __initconst = { static const struct x86_i2c_client_info lenovo_yt3_i2c_clients[] __initconst = {
{ {
/* bq27500 fuel-gauge for the flat lipo battery behind the screen */ /* bq27500 fuel-gauge for the flat lipo battery behind the screen */
...@@ -414,7 +409,7 @@ static const struct x86_i2c_client_info lenovo_yt3_i2c_clients[] __initconst = { ...@@ -414,7 +409,7 @@ static const struct x86_i2c_client_info lenovo_yt3_i2c_clients[] __initconst = {
.type = "lp8557", .type = "lp8557",
.addr = 0x2c, .addr = 0x2c,
.dev_name = "lp8557", .dev_name = "lp8557",
.platform_data = &lenovo_yt3_lp8557_pdata, .platform_data = &lenovo_lp8557_pdata,
}, },
.adapter_path = "\\_SB_.PCI0.I2C1", .adapter_path = "\\_SB_.PCI0.I2C1",
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment