aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/mux/gpio.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/mux/gpio.c')
-rw-r--r--drivers/mux/gpio.c13
1 files changed, 4 insertions, 9 deletions
diff --git a/drivers/mux/gpio.c b/drivers/mux/gpio.c
index 6fdd9316db8b..46c44532fbd5 100644
--- a/drivers/mux/gpio.c
+++ b/drivers/mux/gpio.c
@@ -17,20 +17,17 @@
17 17
18struct mux_gpio { 18struct mux_gpio {
19 struct gpio_descs *gpios; 19 struct gpio_descs *gpios;
20 int *val;
21}; 20};
22 21
23static int mux_gpio_set(struct mux_control *mux, int state) 22static int mux_gpio_set(struct mux_control *mux, int state)
24{ 23{
25 struct mux_gpio *mux_gpio = mux_chip_priv(mux->chip); 24 struct mux_gpio *mux_gpio = mux_chip_priv(mux->chip);
26 int i; 25 DECLARE_BITMAP(values, BITS_PER_TYPE(state));
27 26
28 for (i = 0; i < mux_gpio->gpios->ndescs; i++) 27 values[0] = state;
29 mux_gpio->val[i] = (state >> i) & 1;
30 28
31 gpiod_set_array_value_cansleep(mux_gpio->gpios->ndescs, 29 gpiod_set_array_value_cansleep(mux_gpio->gpios->ndescs,
32 mux_gpio->gpios->desc, 30 mux_gpio->gpios->desc, values);
33 mux_gpio->val);
34 31
35 return 0; 32 return 0;
36} 33}
@@ -58,13 +55,11 @@ static int mux_gpio_probe(struct platform_device *pdev)
58 if (pins < 0) 55 if (pins < 0)
59 return pins; 56 return pins;
60 57
61 mux_chip = devm_mux_chip_alloc(dev, 1, sizeof(*mux_gpio) + 58 mux_chip = devm_mux_chip_alloc(dev, 1, sizeof(*mux_gpio));
62 pins * sizeof(*mux_gpio->val));
63 if (IS_ERR(mux_chip)) 59 if (IS_ERR(mux_chip))
64 return PTR_ERR(mux_chip); 60 return PTR_ERR(mux_chip);
65 61
66 mux_gpio = mux_chip_priv(mux_chip); 62 mux_gpio = mux_chip_priv(mux_chip);
67 mux_gpio->val = (int *)(mux_gpio + 1);
68 mux_chip->ops = &mux_gpio_ops; 63 mux_chip->ops = &mux_gpio_ops;
69 64
70 mux_gpio->gpios = devm_gpiod_get_array(dev, "mux", GPIOD_OUT_LOW); 65 mux_gpio->gpios = devm_gpiod_get_array(dev, "mux", GPIOD_OUT_LOW);