mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-02-17 06:40:11 -05:00
net: can: mcp251x: use new GPIO 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. Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org> Reviewed-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr> Reviewed-by: Marc Kleine-Budde <mkl@pengutronix.de> Link: https://patch.msgid.link/20250616-gpiochip-set-rv-net-v2-4-cae0b182a552@linaro.org Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
committed by
Jakub Kicinski
parent
b9e3c7af9e
commit
5d31311715
@@ -533,29 +533,35 @@ static int mcp251x_gpio_get_multiple(struct gpio_chip *chip,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void mcp251x_gpio_set(struct gpio_chip *chip, unsigned int offset,
|
||||
int value)
|
||||
static int mcp251x_gpio_set(struct gpio_chip *chip, unsigned int offset,
|
||||
int value)
|
||||
{
|
||||
struct mcp251x_priv *priv = gpiochip_get_data(chip);
|
||||
u8 mask, val;
|
||||
int ret;
|
||||
|
||||
mask = BFPCTRL_BFS(offset - MCP251X_GPIO_RX0BF);
|
||||
val = value ? mask : 0;
|
||||
|
||||
mutex_lock(&priv->mcp_lock);
|
||||
mcp251x_write_bits(priv->spi, BFPCTRL, mask, val);
|
||||
ret = mcp251x_write_bits(priv->spi, BFPCTRL, mask, val);
|
||||
mutex_unlock(&priv->mcp_lock);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
priv->reg_bfpctrl &= ~mask;
|
||||
priv->reg_bfpctrl |= val;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
mcp251x_gpio_set_multiple(struct gpio_chip *chip,
|
||||
unsigned long *maskp, unsigned long *bitsp)
|
||||
{
|
||||
struct mcp251x_priv *priv = gpiochip_get_data(chip);
|
||||
u8 mask, val;
|
||||
int ret;
|
||||
|
||||
mask = FIELD_GET(MCP251X_GPIO_OUTPUT_MASK, maskp[0]);
|
||||
mask = FIELD_PREP(BFPCTRL_BFS_MASK, mask);
|
||||
@@ -564,14 +570,18 @@ mcp251x_gpio_set_multiple(struct gpio_chip *chip,
|
||||
val = FIELD_PREP(BFPCTRL_BFS_MASK, val);
|
||||
|
||||
if (!mask)
|
||||
return;
|
||||
return 0;
|
||||
|
||||
mutex_lock(&priv->mcp_lock);
|
||||
mcp251x_write_bits(priv->spi, BFPCTRL, mask, val);
|
||||
ret = mcp251x_write_bits(priv->spi, BFPCTRL, mask, val);
|
||||
mutex_unlock(&priv->mcp_lock);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
priv->reg_bfpctrl &= ~mask;
|
||||
priv->reg_bfpctrl |= val;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void mcp251x_gpio_restore(struct spi_device *spi)
|
||||
@@ -597,8 +607,8 @@ static int mcp251x_gpio_setup(struct mcp251x_priv *priv)
|
||||
gpio->get_direction = mcp251x_gpio_get_direction;
|
||||
gpio->get = mcp251x_gpio_get;
|
||||
gpio->get_multiple = mcp251x_gpio_get_multiple;
|
||||
gpio->set = mcp251x_gpio_set;
|
||||
gpio->set_multiple = mcp251x_gpio_set_multiple;
|
||||
gpio->set_rv = mcp251x_gpio_set;
|
||||
gpio->set_multiple_rv = mcp251x_gpio_set_multiple;
|
||||
gpio->base = -1;
|
||||
gpio->ngpio = ARRAY_SIZE(mcp251x_gpio_names);
|
||||
gpio->names = mcp251x_gpio_names;
|
||||
|
||||
Reference in New Issue
Block a user