hc
2024-02-20 102a0743326a03cd1a1202ceda21e175b7d3575c
kernel/drivers/leds/leds-bd2802.c
....@@ -1,20 +1,16 @@
1
+// SPDX-License-Identifier: GPL-2.0-only
12 /*
23 * leds-bd2802.c - RGB LED Driver
34 *
45 * Copyright (C) 2009 Samsung Electronics
56 * Kim Kyuwon <q1.kim@samsung.com>
67 *
7
- * This program is free software; you can redistribute it and/or modify
8
- * it under the terms of the GNU General Public License version 2 as
9
- * published by the Free Software Foundation.
10
- *
118 * Datasheet: http://www.rohm.com/products/databook/driver/pdf/bd2802gu-e.pdf
12
- *
139 */
1410
1511 #include <linux/module.h>
1612 #include <linux/i2c.h>
17
-#include <linux/gpio.h>
13
+#include <linux/gpio/consumer.h>
1814 #include <linux/delay.h>
1915 #include <linux/leds.h>
2016 #include <linux/leds-bd2802.h>
....@@ -71,6 +67,7 @@
7167 struct bd2802_led {
7268 struct bd2802_led_platform_data *pdata;
7369 struct i2c_client *client;
70
+ struct gpio_desc *reset;
7471 struct rw_semaphore rwsem;
7572
7673 struct led_state led[2];
....@@ -204,7 +201,7 @@
204201 return;
205202
206203 if (bd2802_is_all_off(led) && !led->adf_on) {
207
- gpio_set_value(led->pdata->reset_gpio, 0);
204
+ gpiod_set_value(led->reset, 1);
208205 return;
209206 }
210207
....@@ -230,7 +227,7 @@
230227
231228 static void bd2802_reset_cancel(struct bd2802_led *led)
232229 {
233
- gpio_set_value(led->pdata->reset_gpio, 1);
230
+ gpiod_set_value(led->reset, 0);
234231 udelay(100);
235232 bd2802_configure(led);
236233 }
....@@ -424,7 +421,7 @@
424421 bd2802_addr_attributes[i]);
425422
426423 if (bd2802_is_all_off(led))
427
- gpio_set_value(led->pdata->reset_gpio, 0);
424
+ gpiod_set_value(led->reset, 1);
428425
429426 led->adf_on = 0;
430427 }
....@@ -663,7 +660,6 @@
663660 const struct i2c_device_id *id)
664661 {
665662 struct bd2802_led *led;
666
- struct bd2802_led_platform_data *pdata;
667663 int ret, i;
668664
669665 led = devm_kzalloc(&client->dev, sizeof(struct bd2802_led), GFP_KERNEL);
....@@ -671,11 +667,18 @@
671667 return -ENOMEM;
672668
673669 led->client = client;
674
- pdata = led->pdata = dev_get_platdata(&client->dev);
675670 i2c_set_clientdata(client, led);
676671
677
- /* Configure RESET GPIO (L: RESET, H: RESET cancel) */
678
- gpio_request_one(pdata->reset_gpio, GPIOF_OUT_INIT_HIGH, "RGB_RESETB");
672
+ /*
673
+ * Configure RESET GPIO (L: RESET, H: RESET cancel)
674
+ *
675
+ * We request the reset GPIO as OUT_LOW which means de-asserted,
676
+ * board files specifying this GPIO line in a machine descriptor
677
+ * table should take care to specify GPIO_ACTIVE_LOW for this line.
678
+ */
679
+ led->reset = devm_gpiod_get(&client->dev, "reset", GPIOD_OUT_LOW);
680
+ if (IS_ERR(led->reset))
681
+ return PTR_ERR(led->reset);
679682
680683 /* Tacss = min 0.1ms */
681684 udelay(100);
....@@ -689,7 +692,7 @@
689692 dev_info(&client->dev, "return 0x%02x\n", ret);
690693
691694 /* To save the power, reset BD2802 after detecting */
692
- gpio_set_value(led->pdata->reset_gpio, 0);
695
+ gpiod_set_value(led->reset, 1);
693696
694697 /* Default attributes */
695698 led->wave_pattern = BD2802_PATTERN_HALF;
....@@ -724,7 +727,7 @@
724727 struct bd2802_led *led = i2c_get_clientdata(client);
725728 int i;
726729
727
- gpio_set_value(led->pdata->reset_gpio, 0);
730
+ gpiod_set_value(led->reset, 1);
728731 bd2802_unregister_led_classdev(led);
729732 if (led->adf_on)
730733 bd2802_disable_adv_conf(led);
....@@ -754,7 +757,7 @@
754757 struct i2c_client *client = to_i2c_client(dev);
755758 struct bd2802_led *led = i2c_get_clientdata(client);
756759
757
- gpio_set_value(led->pdata->reset_gpio, 0);
760
+ gpiod_set_value(led->reset, 1);
758761
759762 return 0;
760763 }