Skip to content

Commit 1e69c75

Browse files
author
Bartosz Golaszewski
committed
gpio: cgbc: use new line value setter callbacks
struct gpio_chip now has callbacks for setting line values that return an integer, allowing to indicate failures. Convert the driver to using them. Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Bartosz Golaszewski <[email protected]>
1 parent 19c39c5 commit 1e69c75

File tree

1 file changed

+14
-10
lines changed

1 file changed

+14
-10
lines changed

drivers/gpio/gpio-cgbc.c

Lines changed: 14 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ static int cgbc_gpio_get(struct gpio_chip *chip, unsigned int offset)
5151
return (int)(val & (u8)BIT(offset));
5252
}
5353

54-
static void __cgbc_gpio_set(struct gpio_chip *chip,
55-
unsigned int offset, int value)
54+
static int __cgbc_gpio_set(struct gpio_chip *chip, unsigned int offset,
55+
int value)
5656
{
5757
struct cgbc_gpio_data *gpio = gpiochip_get_data(chip);
5858
struct cgbc_device_data *cgbc = gpio->cgbc;
@@ -61,23 +61,23 @@ static void __cgbc_gpio_set(struct gpio_chip *chip,
6161

6262
ret = cgbc_gpio_cmd(cgbc, CGBC_GPIO_CMD_GET, (offset > 7) ? 1 : 0, 0, &val);
6363
if (ret)
64-
return;
64+
return ret;
6565

6666
if (value)
6767
val |= BIT(offset % 8);
6868
else
6969
val &= ~(BIT(offset % 8));
7070

71-
cgbc_gpio_cmd(cgbc, CGBC_GPIO_CMD_SET, (offset > 7) ? 1 : 0, val, &val);
71+
return cgbc_gpio_cmd(cgbc, CGBC_GPIO_CMD_SET, (offset > 7) ? 1 : 0, val, &val);
7272
}
7373

74-
static void cgbc_gpio_set(struct gpio_chip *chip,
75-
unsigned int offset, int value)
74+
static int cgbc_gpio_set(struct gpio_chip *chip, unsigned int offset, int value)
7675
{
7776
struct cgbc_gpio_data *gpio = gpiochip_get_data(chip);
7877

79-
scoped_guard(mutex, &gpio->lock)
80-
__cgbc_gpio_set(chip, offset, value);
78+
guard(mutex)(&gpio->lock);
79+
80+
return __cgbc_gpio_set(chip, offset, value);
8181
}
8282

8383
static int cgbc_gpio_direction_set(struct gpio_chip *chip,
@@ -116,10 +116,14 @@ static int cgbc_gpio_direction_output(struct gpio_chip *chip,
116116
unsigned int offset, int value)
117117
{
118118
struct cgbc_gpio_data *gpio = gpiochip_get_data(chip);
119+
int ret;
119120

120121
guard(mutex)(&gpio->lock);
121122

122-
__cgbc_gpio_set(chip, offset, value);
123+
ret = __cgbc_gpio_set(chip, offset, value);
124+
if (ret)
125+
return ret;
126+
123127
return cgbc_gpio_direction_set(chip, offset, GPIO_LINE_DIRECTION_OUT);
124128
}
125129

@@ -167,7 +171,7 @@ static int cgbc_gpio_probe(struct platform_device *pdev)
167171
chip->direction_output = cgbc_gpio_direction_output;
168172
chip->get_direction = cgbc_gpio_get_direction;
169173
chip->get = cgbc_gpio_get;
170-
chip->set = cgbc_gpio_set;
174+
chip->set_rv = cgbc_gpio_set;
171175
chip->ngpio = CGBC_GPIO_NGPIO;
172176

173177
ret = devm_mutex_init(dev, &gpio->lock);

0 commit comments

Comments
 (0)