mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-25 15:30:54 +07:00
gpio: syscon: add soc specific callback to assign output value
Some SoCs (like Keystone) may require to perform special sequence of operations to assign output GPIO value, so default implementation of .set() callback from gpio-syscon driver can't be used. Hence, add optional, SoC specific callback to assign output gpio value. Signed-off-by: Grygorii Strashko <grygorii.strashko@ti.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
parent
3af0dbd592
commit
2c341d62eb
@ -37,6 +37,8 @@
|
||||
* dat_bit_offset: Offset (in bits) to the first GPIO bit.
|
||||
* dir_bit_offset: Optional offset (in bits) to the first bit to switch
|
||||
* GPIO direction (Used with GPIO_SYSCON_FEAT_DIR flag).
|
||||
* set: HW specific callback to assigns output value
|
||||
* for signal "offset"
|
||||
*/
|
||||
|
||||
struct syscon_gpio_data {
|
||||
@ -45,6 +47,8 @@ struct syscon_gpio_data {
|
||||
unsigned int bit_count;
|
||||
unsigned int dat_bit_offset;
|
||||
unsigned int dir_bit_offset;
|
||||
void (*set)(struct gpio_chip *chip,
|
||||
unsigned offset, int value);
|
||||
};
|
||||
|
||||
struct syscon_gpio_priv {
|
||||
@ -111,7 +115,7 @@ static int syscon_gpio_dir_out(struct gpio_chip *chip, unsigned offset, int val)
|
||||
BIT(offs % SYSCON_REG_BITS));
|
||||
}
|
||||
|
||||
syscon_gpio_set(chip, offset, val);
|
||||
priv->data->set(chip, offset, val);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -159,7 +163,7 @@ static int syscon_gpio_probe(struct platform_device *pdev)
|
||||
if (priv->data->flags & GPIO_SYSCON_FEAT_IN)
|
||||
priv->chip.direction_input = syscon_gpio_dir_in;
|
||||
if (priv->data->flags & GPIO_SYSCON_FEAT_OUT) {
|
||||
priv->chip.set = syscon_gpio_set;
|
||||
priv->chip.set = priv->data->set ? : syscon_gpio_set;
|
||||
priv->chip.direction_output = syscon_gpio_dir_out;
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user