diff mbox series

[1/4] leds: cpcap: add support for the keyboard light channel

Message ID 20221204104313.17478-1-philipp@uvos.xyz (mailing list archive)
State New, archived
Headers show
Series [1/4] leds: cpcap: add support for the keyboard light channel | expand

Commit Message

Carl Philipp Klemm Dec. 4, 2022, 10:43 a.m. UTC
The keyboard light channel is used on xt875 for the touchscreen
button lights.
This commit also adds a checks for the sucessfull return of
device_get_match_data.

Signed-off-by: Carl Philipp Klemm <philipp@uvos.xyz>
---
 drivers/leds/leds-cpcap.c    | 15 +++++++++++++++
 drivers/mfd/motorola-cpcap.c |  4 ++++
 2 files changed, 19 insertions(+)

Comments

Sebastian Reichel Dec. 5, 2022, 5:41 p.m. UTC | #1
Hi,

On Sun, Dec 04, 2022 at 11:43:10AM +0100, Carl Philipp Klemm wrote:
> The keyboard light channel is used on xt875 for the touchscreen
> button lights.
> This commit also adds a checks for the sucessfull return of
> device_get_match_data.

"this commit also adds ..." means, that the commit should be split
:)

> Signed-off-by: Carl Philipp Klemm <philipp@uvos.xyz>
> ---
>  drivers/leds/leds-cpcap.c    | 15 +++++++++++++++
>  drivers/mfd/motorola-cpcap.c |  4 ++++
>  2 files changed, 19 insertions(+)
> 
> diff --git a/drivers/leds/leds-cpcap.c b/drivers/leds/leds-cpcap.c
> index 7d41ce8c9bb1..11a9b857d8ea 100644
> --- a/drivers/leds/leds-cpcap.c
> +++ b/drivers/leds/leds-cpcap.c
> @@ -58,6 +58,15 @@ static const struct cpcap_led_info cpcap_led_cp = {
>  	.init_val	= 0x0008,
>  };
>  
> +/* keyboard led */
> +static const struct cpcap_led_info cpcap_led_kl = {
> +	.reg		= CPCAP_REG_KLC,
> +	.mask		= 0x0001,
> +	.limit		= 1,
> +	.init_mask	= 0x07FF,
> +	.init_val	= 0x07F0,
> +};
> +
>  struct cpcap_led {
>  	struct led_classdev led;
>  	const struct cpcap_led_info *info;
> @@ -152,6 +161,7 @@ static const struct of_device_id cpcap_led_of_match[] = {
>  	{ .compatible = "motorola,cpcap-led-blue",  .data = &cpcap_led_blue },
>  	{ .compatible = "motorola,cpcap-led-adl", .data = &cpcap_led_adl },
>  	{ .compatible = "motorola,cpcap-led-cp", .data = &cpcap_led_cp },
> +	{ .compatible = "motorola,cpcap-led-kl", .data = &cpcap_led_kl },
>  	{},
>  };
>  MODULE_DEVICE_TABLE(of, cpcap_led_of_match);
> @@ -168,6 +178,11 @@ static int cpcap_led_probe(struct platform_device *pdev)
>  	led->info = device_get_match_data(&pdev->dev);
>  	led->dev = &pdev->dev;
>  
> +	if (!led->info) {
> +		dev_warn(led->dev, "Can't get match data");
> +		return -ENODEV;
> +	}

If it's fatal, it should be dev_err and not dev_warn:

if (!led->info)
    return dev_err_probe(led->dev, -ENODEV, "Can't get match data");

-- Sebastian

> +
>  	if (led->info->reg == 0x0000) {
>  		dev_err(led->dev, "Unsupported LED");
>  		return -ENODEV;
> diff --git a/drivers/mfd/motorola-cpcap.c b/drivers/mfd/motorola-cpcap.c
> index 265464b5d7cc..57b3378a8829 100644
> --- a/drivers/mfd/motorola-cpcap.c
> +++ b/drivers/mfd/motorola-cpcap.c
> @@ -285,6 +285,10 @@ static const struct mfd_cell cpcap_mfd_devices[] = {
>  		.name          = "cpcap-led",
>  		.id            = 4,
>  		.of_compatible = "motorola,cpcap-led-cp",
> +	}, {
> +		.name          = "cpcap-led",
> +		.id            = 5,
> +		.of_compatible = "motorola,cpcap-led-kl",
>  	}, {
>  		.name          = "cpcap-codec",
>  	}
> -- 
> 2.38.1
> 
>
diff mbox series

Patch

diff --git a/drivers/leds/leds-cpcap.c b/drivers/leds/leds-cpcap.c
index 7d41ce8c9bb1..11a9b857d8ea 100644
--- a/drivers/leds/leds-cpcap.c
+++ b/drivers/leds/leds-cpcap.c
@@ -58,6 +58,15 @@  static const struct cpcap_led_info cpcap_led_cp = {
 	.init_val	= 0x0008,
 };
 
+/* keyboard led */
+static const struct cpcap_led_info cpcap_led_kl = {
+	.reg		= CPCAP_REG_KLC,
+	.mask		= 0x0001,
+	.limit		= 1,
+	.init_mask	= 0x07FF,
+	.init_val	= 0x07F0,
+};
+
 struct cpcap_led {
 	struct led_classdev led;
 	const struct cpcap_led_info *info;
@@ -152,6 +161,7 @@  static const struct of_device_id cpcap_led_of_match[] = {
 	{ .compatible = "motorola,cpcap-led-blue",  .data = &cpcap_led_blue },
 	{ .compatible = "motorola,cpcap-led-adl", .data = &cpcap_led_adl },
 	{ .compatible = "motorola,cpcap-led-cp", .data = &cpcap_led_cp },
+	{ .compatible = "motorola,cpcap-led-kl", .data = &cpcap_led_kl },
 	{},
 };
 MODULE_DEVICE_TABLE(of, cpcap_led_of_match);
@@ -168,6 +178,11 @@  static int cpcap_led_probe(struct platform_device *pdev)
 	led->info = device_get_match_data(&pdev->dev);
 	led->dev = &pdev->dev;
 
+	if (!led->info) {
+		dev_warn(led->dev, "Can't get match data");
+		return -ENODEV;
+	}
+
 	if (led->info->reg == 0x0000) {
 		dev_err(led->dev, "Unsupported LED");
 		return -ENODEV;
diff --git a/drivers/mfd/motorola-cpcap.c b/drivers/mfd/motorola-cpcap.c
index 265464b5d7cc..57b3378a8829 100644
--- a/drivers/mfd/motorola-cpcap.c
+++ b/drivers/mfd/motorola-cpcap.c
@@ -285,6 +285,10 @@  static const struct mfd_cell cpcap_mfd_devices[] = {
 		.name          = "cpcap-led",
 		.id            = 4,
 		.of_compatible = "motorola,cpcap-led-cp",
+	}, {
+		.name          = "cpcap-led",
+		.id            = 5,
+		.of_compatible = "motorola,cpcap-led-kl",
 	}, {
 		.name          = "cpcap-codec",
 	}