• Home
  • Raw
  • Download

Lines Matching +full:gpio +full:- +full:mux

1 // SPDX-License-Identifier: GPL-2.0-only
3 * TI/National Semiconductor LP3943 GPIO driver
12 #include <linux/gpio/driver.h>
42 u16 input_mask; /* 1 = GPIO is input direction, 0 = output */
48 struct lp3943 *lp3943 = lp3943_gpio->lp3943; in lp3943_gpio_request()
51 if (test_and_set_bit(offset, &lp3943->pin_used)) in lp3943_gpio_request()
52 return -EBUSY; in lp3943_gpio_request()
60 struct lp3943 *lp3943 = lp3943_gpio->lp3943; in lp3943_gpio_free()
62 clear_bit(offset, &lp3943->pin_used); in lp3943_gpio_free()
68 struct lp3943 *lp3943 = lp3943_gpio->lp3943; in lp3943_gpio_set_mode()
69 const struct lp3943_reg_cfg *mux = lp3943->mux_cfg; in lp3943_gpio_set_mode() local
71 return lp3943_update_bits(lp3943, mux[offset].reg, mux[offset].mask, in lp3943_gpio_set_mode()
72 val << mux[offset].shift); in lp3943_gpio_set_mode()
79 lp3943_gpio->input_mask |= BIT(offset); in lp3943_gpio_direction_input()
96 offset = offset - 8; in lp3943_get_gpio_in_status()
99 return -EINVAL; in lp3943_get_gpio_in_status()
102 err = lp3943_read_byte(lp3943_gpio->lp3943, addr, &read); in lp3943_get_gpio_in_status()
112 struct lp3943 *lp3943 = lp3943_gpio->lp3943; in lp3943_get_gpio_out_status()
113 const struct lp3943_reg_cfg *mux = lp3943->mux_cfg; in lp3943_get_gpio_out_status() local
117 err = lp3943_read_byte(lp3943, mux[offset].reg, &read); in lp3943_get_gpio_out_status()
121 read = (read & mux[offset].mask) >> mux[offset].shift; in lp3943_get_gpio_out_status()
128 return -EINVAL; in lp3943_get_gpio_out_status()
137 * LP3943 doesn't have the GPIO direction register. It provides in lp3943_gpio_get()
144 if (lp3943_gpio->input_mask & BIT(offset)) in lp3943_gpio_get()
169 lp3943_gpio->input_mask &= ~BIT(offset); in lp3943_gpio_direction_output()
183 .base = -1,
190 struct lp3943 *lp3943 = dev_get_drvdata(pdev->dev.parent); in lp3943_gpio_probe()
193 lp3943_gpio = devm_kzalloc(&pdev->dev, sizeof(*lp3943_gpio), in lp3943_gpio_probe()
196 return -ENOMEM; in lp3943_gpio_probe()
198 lp3943_gpio->lp3943 = lp3943; in lp3943_gpio_probe()
199 lp3943_gpio->chip = lp3943_gpio_chip; in lp3943_gpio_probe()
200 lp3943_gpio->chip.parent = &pdev->dev; in lp3943_gpio_probe()
204 return devm_gpiochip_add_data(&pdev->dev, &lp3943_gpio->chip, in lp3943_gpio_probe()
209 { .compatible = "ti,lp3943-gpio", },
217 .name = "lp3943-gpio",
223 MODULE_DESCRIPTION("LP3943 GPIO driver");
224 MODULE_ALIAS("platform:lp3943-gpio");