* [PATCH 1/2] platform/x86: x86-android-tablets: Pass struct device to init()
@ 2024-05-05 16:08 Hans de Goede
2024-05-05 16:08 ` [PATCH 2/2] platform/x86: x86-android-tablets: Create LED device for Xiaomi Pad 2 bottom bezel touch buttons Hans de Goede
2024-05-06 14:59 ` [PATCH 1/2] platform/x86: x86-android-tablets: Pass struct device to init() Ilpo Järvinen
0 siblings, 2 replies; 4+ messages in thread
From: Hans de Goede @ 2024-05-05 16:08 UTC (permalink / raw)
To: Ilpo Järvinen, Andy Shevchenko
Cc: Hans de Goede, platform-driver-x86, Kate Hsuan
Pass a struct device pointer for x86_android_tablet_device to the board
specific init() functions, so that these functions can use this for
e.g. devm_*() functions.
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
drivers/platform/x86/x86-android-tablets/core.c | 2 +-
drivers/platform/x86/x86-android-tablets/lenovo.c | 10 +++++-----
drivers/platform/x86/x86-android-tablets/other.c | 6 +++---
.../x86/x86-android-tablets/x86-android-tablets.h | 2 +-
4 files changed, 10 insertions(+), 10 deletions(-)
diff --git a/drivers/platform/x86/x86-android-tablets/core.c b/drivers/platform/x86/x86-android-tablets/core.c
index 9bb10eadb699..919ef4471229 100644
--- a/drivers/platform/x86/x86-android-tablets/core.c
+++ b/drivers/platform/x86/x86-android-tablets/core.c
@@ -341,7 +341,7 @@ static __init int x86_android_tablet_probe(struct platform_device *pdev)
gpiod_add_lookup_table(gpiod_lookup_tables[i]);
if (dev_info->init) {
- ret = dev_info->init();
+ ret = dev_info->init(&pdev->dev);
if (ret < 0) {
x86_android_tablet_remove(pdev);
return ret;
diff --git a/drivers/platform/x86/x86-android-tablets/lenovo.c b/drivers/platform/x86/x86-android-tablets/lenovo.c
index 16fa04d604a0..74f39b658d2c 100644
--- a/drivers/platform/x86/x86-android-tablets/lenovo.c
+++ b/drivers/platform/x86/x86-android-tablets/lenovo.c
@@ -230,7 +230,7 @@ static struct gpiod_lookup_table * const lenovo_yb1_x90_gpios[] = {
NULL
};
-static int __init lenovo_yb1_x90_init(void)
+static int __init lenovo_yb1_x90_init(struct device *dev)
{
/* Enable the regulators used by the touchscreens */
@@ -412,7 +412,7 @@ static struct gpiod_lookup_table * const lenovo_yoga_tab2_830_1050_gpios[] = {
NULL
};
-static int __init lenovo_yoga_tab2_830_1050_init(void);
+static int __init lenovo_yoga_tab2_830_1050_init(struct device *dev);
static void lenovo_yoga_tab2_830_1050_exit(void);
const struct x86_dev_info lenovo_yoga_tab2_830_1050_info __initconst = {
@@ -534,7 +534,7 @@ static int lenovo_yoga_tab2_830_1050_power_off(struct sys_off_data *data)
return NOTIFY_DONE;
}
-static int __init lenovo_yoga_tab2_830_1050_init(void)
+static int __init lenovo_yoga_tab2_830_1050_init(struct device *dev)
{
int ret;
@@ -731,7 +731,7 @@ const char * const lenovo_yoga_tab2_1380_modules[] __initconst = {
NULL
};
-static int __init lenovo_yoga_tab2_1380_init(void)
+static int __init lenovo_yoga_tab2_1380_init(struct device *dev)
{
int ret;
@@ -978,7 +978,7 @@ static const struct x86_spi_dev_info lenovo_yt3_spi_devs[] __initconst = {
}
};
-static int __init lenovo_yt3_init(void)
+static int __init lenovo_yt3_init(struct device *dev)
{
int ret;
diff --git a/drivers/platform/x86/x86-android-tablets/other.c b/drivers/platform/x86/x86-android-tablets/other.c
index d3fb19cff555..ff7b1d0abaa3 100644
--- a/drivers/platform/x86/x86-android-tablets/other.c
+++ b/drivers/platform/x86/x86-android-tablets/other.c
@@ -183,7 +183,7 @@ static const struct x86_i2c_client_info chuwi_hi8_i2c_clients[] __initconst = {
},
};
-static int __init chuwi_hi8_init(void)
+static int __init chuwi_hi8_init(struct device *dev)
{
/*
* Avoid the acpi_unregister_gsi() call in x86_acpi_irq_helper_get()
@@ -244,7 +244,7 @@ const struct x86_dev_info cyberbook_t116_info __initconst = {
#define CZC_EC_EXTRA_PORT 0x68
#define CZC_EC_ANDROID_KEYS 0x63
-static int __init czc_p10t_init(void)
+static int __init czc_p10t_init(struct device *dev)
{
/*
* The device boots up in "Windows 7" mode, when the home button sends a
@@ -662,7 +662,7 @@ static const struct software_node *ktd2026_node_group[] = {
NULL
};
-static int __init xiaomi_mipad2_init(void)
+static int __init xiaomi_mipad2_init(struct device *dev)
{
return software_node_register_node_group(ktd2026_node_group);
}
diff --git a/drivers/platform/x86/x86-android-tablets/x86-android-tablets.h b/drivers/platform/x86/x86-android-tablets/x86-android-tablets.h
index 821dc094b025..86402b9b46a3 100644
--- a/drivers/platform/x86/x86-android-tablets/x86-android-tablets.h
+++ b/drivers/platform/x86/x86-android-tablets/x86-android-tablets.h
@@ -89,7 +89,7 @@ struct x86_dev_info {
int pdev_count;
int serdev_count;
int gpio_button_count;
- int (*init)(void);
+ int (*init)(struct device *dev);
void (*exit)(void);
};
--
2.44.0
^ permalink raw reply related [flat|nested] 4+ messages in thread* [PATCH 2/2] platform/x86: x86-android-tablets: Create LED device for Xiaomi Pad 2 bottom bezel touch buttons
2024-05-05 16:08 [PATCH 1/2] platform/x86: x86-android-tablets: Pass struct device to init() Hans de Goede
@ 2024-05-05 16:08 ` Hans de Goede
2024-05-06 15:02 ` Ilpo Järvinen
2024-05-06 14:59 ` [PATCH 1/2] platform/x86: x86-android-tablets: Pass struct device to init() Ilpo Järvinen
1 sibling, 1 reply; 4+ messages in thread
From: Hans de Goede @ 2024-05-05 16:08 UTC (permalink / raw)
To: Ilpo Järvinen, Andy Shevchenko
Cc: Hans de Goede, platform-driver-x86, Kate Hsuan
The Xiaomi [Mi]Pad 2 has 3 menu / home / back capacitive touch-buttons
on its bottom bezel. These are backlit by LEDs attached to a TPS61158 LED
controller which is controlled by the "pwm_soc_lpss_2" PWM output.
Create a LED class device for this, using the new input-events trigger
as default trigger so that the buttons automatically light up on any
input activity.
Note alternatively a "leds_pwm" platform device could be created together
with the necessary fwnode_s_ and a fwnode link to the PWM controller.
There are 2 downsides to this approach:
1. The code would still need to pwm_get() the PWM controller to get/attach
a fwnode for the PWM controller fwnode link and setting up the necessary
fwnodes is non trivial. So this would likely require more code then simply
registering the LED class device directly.
2. Currently the leds_pwm driver and its devicetree bindings do not support
limiting the maximum dutycycle to less then 100% which is required in this
case (the leds_pwm driver can probably be extended to allow this).
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
---
.../platform/x86/x86-android-tablets/other.c | 44 +++++++++++++++++++
1 file changed, 44 insertions(+)
diff --git a/drivers/platform/x86/x86-android-tablets/other.c b/drivers/platform/x86/x86-android-tablets/other.c
index ff7b1d0abaa3..aa95645f3f24 100644
--- a/drivers/platform/x86/x86-android-tablets/other.c
+++ b/drivers/platform/x86/x86-android-tablets/other.c
@@ -11,7 +11,9 @@
#include <linux/acpi.h>
#include <linux/gpio/machine.h>
#include <linux/input.h>
+#include <linux/leds.h>
#include <linux/platform_device.h>
+#include <linux/pwm.h>
#include <dt-bindings/leds/common.h>
@@ -662,8 +664,50 @@ static const struct software_node *ktd2026_node_group[] = {
NULL
};
+/*
+ * For the LEDs which backlight the menu / home / back capacitive buttons on
+ * the bottom bezel. These are attached to a TPS61158 LED controller which
+ * is controlled by the "pwm_soc_lpss_2" PWM output.
+ */
+#define XIAOMI_MIPAD2_LED_PERIOD_NS 19200
+#define XIAOMI_MIPAD2_LED_MAX_DUTY 6000 /* From Android kernel */
+
+static struct pwm_device *xiaomi_mipad2_led_pwm;
+
+static int xiaomi_mipad2_brightness_set(struct led_classdev *led_cdev,
+ enum led_brightness val)
+{
+ struct pwm_state state = {
+ .period = XIAOMI_MIPAD2_LED_PERIOD_NS,
+ .duty_cycle = val,
+ .enabled = !!val,
+ };
+
+ return pwm_apply_might_sleep(xiaomi_mipad2_led_pwm, &state);
+}
+
static int __init xiaomi_mipad2_init(struct device *dev)
{
+ struct led_classdev *led_cdev;
+ int ret;
+
+ xiaomi_mipad2_led_pwm = devm_pwm_get(dev, "pwm_soc_lpss_2");
+ if (IS_ERR(xiaomi_mipad2_led_pwm))
+ return dev_err_probe(dev, PTR_ERR(xiaomi_mipad2_led_pwm), "getting pwm\n");
+
+ led_cdev = devm_kzalloc(dev, sizeof(*led_cdev), GFP_KERNEL);
+ if (!led_cdev)
+ return -ENOMEM;
+
+ led_cdev->name = "mipad2:white:touch-buttons-backlight";
+ led_cdev->max_brightness = XIAOMI_MIPAD2_LED_MAX_DUTY;
+ led_cdev->brightness_set_blocking = xiaomi_mipad2_brightness_set;
+ led_cdev->default_trigger = "input-events";
+
+ ret = devm_led_classdev_register(dev, led_cdev);
+ if (ret)
+ return dev_err_probe(dev, ret, "registering LED\n");
+
return software_node_register_node_group(ktd2026_node_group);
}
--
2.44.0
^ permalink raw reply related [flat|nested] 4+ messages in thread* Re: [PATCH 2/2] platform/x86: x86-android-tablets: Create LED device for Xiaomi Pad 2 bottom bezel touch buttons
2024-05-05 16:08 ` [PATCH 2/2] platform/x86: x86-android-tablets: Create LED device for Xiaomi Pad 2 bottom bezel touch buttons Hans de Goede
@ 2024-05-06 15:02 ` Ilpo Järvinen
0 siblings, 0 replies; 4+ messages in thread
From: Ilpo Järvinen @ 2024-05-06 15:02 UTC (permalink / raw)
To: Hans de Goede; +Cc: Andy Shevchenko, platform-driver-x86, Kate Hsuan
[-- Attachment #1: Type: text/plain, Size: 3700 bytes --]
On Sun, 5 May 2024, Hans de Goede wrote:
> The Xiaomi [Mi]Pad 2 has 3 menu / home / back capacitive touch-buttons
> on its bottom bezel. These are backlit by LEDs attached to a TPS61158 LED
> controller which is controlled by the "pwm_soc_lpss_2" PWM output.
>
> Create a LED class device for this, using the new input-events trigger
> as default trigger so that the buttons automatically light up on any
> input activity.
>
> Note alternatively a "leds_pwm" platform device could be created together
> with the necessary fwnode_s_ and a fwnode link to the PWM controller.
> There are 2 downsides to this approach:
>
> 1. The code would still need to pwm_get() the PWM controller to get/attach
> a fwnode for the PWM controller fwnode link and setting up the necessary
> fwnodes is non trivial. So this would likely require more code then simply
non-trivial
> registering the LED class device directly.
>
> 2. Currently the leds_pwm driver and its devicetree bindings do not support
> limiting the maximum dutycycle to less then 100% which is required in this
> case (the leds_pwm driver can probably be extended to allow this).
Double space.
> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
> ---
> .../platform/x86/x86-android-tablets/other.c | 44 +++++++++++++++++++
> 1 file changed, 44 insertions(+)
>
> diff --git a/drivers/platform/x86/x86-android-tablets/other.c b/drivers/platform/x86/x86-android-tablets/other.c
> index ff7b1d0abaa3..aa95645f3f24 100644
> --- a/drivers/platform/x86/x86-android-tablets/other.c
> +++ b/drivers/platform/x86/x86-android-tablets/other.c
> @@ -11,7 +11,9 @@
> #include <linux/acpi.h>
> #include <linux/gpio/machine.h>
> #include <linux/input.h>
> +#include <linux/leds.h>
> #include <linux/platform_device.h>
> +#include <linux/pwm.h>
>
> #include <dt-bindings/leds/common.h>
>
> @@ -662,8 +664,50 @@ static const struct software_node *ktd2026_node_group[] = {
> NULL
> };
>
> +/*
> + * For the LEDs which backlight the menu / home / back capacitive buttons on
> + * the bottom bezel. These are attached to a TPS61158 LED controller which
> + * is controlled by the "pwm_soc_lpss_2" PWM output.
> + */
> +#define XIAOMI_MIPAD2_LED_PERIOD_NS 19200
> +#define XIAOMI_MIPAD2_LED_MAX_DUTY 6000 /* From Android kernel */
> +
> +static struct pwm_device *xiaomi_mipad2_led_pwm;
> +
> +static int xiaomi_mipad2_brightness_set(struct led_classdev *led_cdev,
> + enum led_brightness val)
> +{
> + struct pwm_state state = {
> + .period = XIAOMI_MIPAD2_LED_PERIOD_NS,
> + .duty_cycle = val,
> + .enabled = !!val,
> + };
> +
> + return pwm_apply_might_sleep(xiaomi_mipad2_led_pwm, &state);
> +}
> +
> static int __init xiaomi_mipad2_init(struct device *dev)
> {
> + struct led_classdev *led_cdev;
> + int ret;
> +
> + xiaomi_mipad2_led_pwm = devm_pwm_get(dev, "pwm_soc_lpss_2");
> + if (IS_ERR(xiaomi_mipad2_led_pwm))
> + return dev_err_probe(dev, PTR_ERR(xiaomi_mipad2_led_pwm), "getting pwm\n");
> +
> + led_cdev = devm_kzalloc(dev, sizeof(*led_cdev), GFP_KERNEL);
> + if (!led_cdev)
> + return -ENOMEM;
> +
> + led_cdev->name = "mipad2:white:touch-buttons-backlight";
> + led_cdev->max_brightness = XIAOMI_MIPAD2_LED_MAX_DUTY;
> + led_cdev->brightness_set_blocking = xiaomi_mipad2_brightness_set;
> + led_cdev->default_trigger = "input-events";
> +
> + ret = devm_led_classdev_register(dev, led_cdev);
> + if (ret)
> + return dev_err_probe(dev, ret, "registering LED\n");
> +
> return software_node_register_node_group(ktd2026_node_group);
> }
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
--
i.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH 1/2] platform/x86: x86-android-tablets: Pass struct device to init()
2024-05-05 16:08 [PATCH 1/2] platform/x86: x86-android-tablets: Pass struct device to init() Hans de Goede
2024-05-05 16:08 ` [PATCH 2/2] platform/x86: x86-android-tablets: Create LED device for Xiaomi Pad 2 bottom bezel touch buttons Hans de Goede
@ 2024-05-06 14:59 ` Ilpo Järvinen
1 sibling, 0 replies; 4+ messages in thread
From: Ilpo Järvinen @ 2024-05-06 14:59 UTC (permalink / raw)
To: Hans de Goede; +Cc: Andy Shevchenko, platform-driver-x86, Kate Hsuan
[-- Attachment #1: Type: text/plain, Size: 350 bytes --]
On Sun, 5 May 2024, Hans de Goede wrote:
> Pass a struct device pointer for x86_android_tablet_device to the board
> specific init() functions, so that these functions can use this for
> e.g. devm_*() functions.
>
> Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com>
--
i.
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2024-05-06 15:02 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-05-05 16:08 [PATCH 1/2] platform/x86: x86-android-tablets: Pass struct device to init() Hans de Goede
2024-05-05 16:08 ` [PATCH 2/2] platform/x86: x86-android-tablets: Create LED device for Xiaomi Pad 2 bottom bezel touch buttons Hans de Goede
2024-05-06 15:02 ` Ilpo Järvinen
2024-05-06 14:59 ` [PATCH 1/2] platform/x86: x86-android-tablets: Pass struct device to init() Ilpo Järvinen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox