Skip to content

Commit 6786dd7

Browse files
committed
Merge branch 'net-use-new-gpio-line-value-setter-callbacks'
Bartosz Golaszewski says: ==================== net: use new GPIO line value setter callbacks Commit 98ce1eb ("gpiolib: introduce gpio_chip setters that return values") added new line setter callbacks to struct gpio_chip. They allow to indicate failures to callers. We're in the process of converting all GPIO controllers to using them before removing the old ones. This series converts all GPIO chips implemented under drivers/net/. v1: https://lore.kernel.org/[email protected] ==================== Link: https://patch.msgid.link/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
2 parents b11344f + dea3be4 commit 6786dd7

File tree

4 files changed

+41
-25
lines changed

4 files changed

+41
-25
lines changed

drivers/net/can/spi/mcp251x.c

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -388,8 +388,8 @@ static void mcp251x_write_2regs(struct spi_device *spi, u8 reg, u8 v1, u8 v2)
388388
mcp251x_spi_write(spi, 4);
389389
}
390390

391-
static void mcp251x_write_bits(struct spi_device *spi, u8 reg,
392-
u8 mask, u8 val)
391+
static int mcp251x_write_bits(struct spi_device *spi, u8 reg,
392+
u8 mask, u8 val)
393393
{
394394
struct mcp251x_priv *priv = spi_get_drvdata(spi);
395395

@@ -398,7 +398,7 @@ static void mcp251x_write_bits(struct spi_device *spi, u8 reg,
398398
priv->spi_tx_buf[2] = mask;
399399
priv->spi_tx_buf[3] = val;
400400

401-
mcp251x_spi_write(spi, 4);
401+
return mcp251x_spi_write(spi, 4);
402402
}
403403

404404
static u8 mcp251x_read_stat(struct spi_device *spi)
@@ -441,6 +441,7 @@ static int mcp251x_gpio_request(struct gpio_chip *chip,
441441
unsigned int offset)
442442
{
443443
struct mcp251x_priv *priv = gpiochip_get_data(chip);
444+
int ret;
444445
u8 val;
445446

446447
/* nothing to be done for inputs */
@@ -450,8 +451,10 @@ static int mcp251x_gpio_request(struct gpio_chip *chip,
450451
val = BFPCTRL_BFE(offset - MCP251X_GPIO_RX0BF);
451452

452453
mutex_lock(&priv->mcp_lock);
453-
mcp251x_write_bits(priv->spi, BFPCTRL, val, val);
454+
ret = mcp251x_write_bits(priv->spi, BFPCTRL, val, val);
454455
mutex_unlock(&priv->mcp_lock);
456+
if (ret)
457+
return ret;
455458

456459
priv->reg_bfpctrl |= val;
457460

@@ -530,29 +533,35 @@ static int mcp251x_gpio_get_multiple(struct gpio_chip *chip,
530533
return 0;
531534
}
532535

533-
static void mcp251x_gpio_set(struct gpio_chip *chip, unsigned int offset,
534-
int value)
536+
static int mcp251x_gpio_set(struct gpio_chip *chip, unsigned int offset,
537+
int value)
535538
{
536539
struct mcp251x_priv *priv = gpiochip_get_data(chip);
537540
u8 mask, val;
541+
int ret;
538542

539543
mask = BFPCTRL_BFS(offset - MCP251X_GPIO_RX0BF);
540544
val = value ? mask : 0;
541545

542546
mutex_lock(&priv->mcp_lock);
543-
mcp251x_write_bits(priv->spi, BFPCTRL, mask, val);
547+
ret = mcp251x_write_bits(priv->spi, BFPCTRL, mask, val);
544548
mutex_unlock(&priv->mcp_lock);
549+
if (ret)
550+
return ret;
545551

546552
priv->reg_bfpctrl &= ~mask;
547553
priv->reg_bfpctrl |= val;
554+
555+
return 0;
548556
}
549557

550-
static void
558+
static int
551559
mcp251x_gpio_set_multiple(struct gpio_chip *chip,
552560
unsigned long *maskp, unsigned long *bitsp)
553561
{
554562
struct mcp251x_priv *priv = gpiochip_get_data(chip);
555563
u8 mask, val;
564+
int ret;
556565

557566
mask = FIELD_GET(MCP251X_GPIO_OUTPUT_MASK, maskp[0]);
558567
mask = FIELD_PREP(BFPCTRL_BFS_MASK, mask);
@@ -561,14 +570,18 @@ mcp251x_gpio_set_multiple(struct gpio_chip *chip,
561570
val = FIELD_PREP(BFPCTRL_BFS_MASK, val);
562571

563572
if (!mask)
564-
return;
573+
return 0;
565574

566575
mutex_lock(&priv->mcp_lock);
567-
mcp251x_write_bits(priv->spi, BFPCTRL, mask, val);
576+
ret = mcp251x_write_bits(priv->spi, BFPCTRL, mask, val);
568577
mutex_unlock(&priv->mcp_lock);
578+
if (ret)
579+
return ret;
569580

570581
priv->reg_bfpctrl &= ~mask;
571582
priv->reg_bfpctrl |= val;
583+
584+
return 0;
572585
}
573586

574587
static void mcp251x_gpio_restore(struct spi_device *spi)
@@ -594,8 +607,8 @@ static int mcp251x_gpio_setup(struct mcp251x_priv *priv)
594607
gpio->get_direction = mcp251x_gpio_get_direction;
595608
gpio->get = mcp251x_gpio_get;
596609
gpio->get_multiple = mcp251x_gpio_get_multiple;
597-
gpio->set = mcp251x_gpio_set;
598-
gpio->set_multiple = mcp251x_gpio_set_multiple;
610+
gpio->set_rv = mcp251x_gpio_set;
611+
gpio->set_multiple_rv = mcp251x_gpio_set_multiple;
599612
gpio->base = -1;
600613
gpio->ngpio = ARRAY_SIZE(mcp251x_gpio_names);
601614
gpio->names = mcp251x_gpio_names;

drivers/net/dsa/mt7530.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2112,7 +2112,7 @@ mt7530_gpio_get(struct gpio_chip *gc, unsigned int offset)
21122112
return !!(mt7530_read(priv, MT7530_LED_GPIO_DATA) & bit);
21132113
}
21142114

2115-
static void
2115+
static int
21162116
mt7530_gpio_set(struct gpio_chip *gc, unsigned int offset, int value)
21172117
{
21182118
struct mt7530_priv *priv = gpiochip_get_data(gc);
@@ -2122,6 +2122,8 @@ mt7530_gpio_set(struct gpio_chip *gc, unsigned int offset, int value)
21222122
mt7530_set(priv, MT7530_LED_GPIO_DATA, bit);
21232123
else
21242124
mt7530_clear(priv, MT7530_LED_GPIO_DATA, bit);
2125+
2126+
return 0;
21252127
}
21262128

21272129
static int
@@ -2185,7 +2187,7 @@ mt7530_setup_gpio(struct mt7530_priv *priv)
21852187
gc->direction_input = mt7530_gpio_direction_input;
21862188
gc->direction_output = mt7530_gpio_direction_output;
21872189
gc->get = mt7530_gpio_get;
2188-
gc->set = mt7530_gpio_set;
2190+
gc->set_rv = mt7530_gpio_set;
21892191
gc->base = -1;
21902192
gc->ngpio = 15;
21912193
gc->can_sleep = true;

drivers/net/dsa/vitesse-vsc73xx-core.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2258,14 +2258,14 @@ static int vsc73xx_gpio_get(struct gpio_chip *chip, unsigned int offset)
22582258
return !!(val & BIT(offset));
22592259
}
22602260

2261-
static void vsc73xx_gpio_set(struct gpio_chip *chip, unsigned int offset,
2262-
int val)
2261+
static int vsc73xx_gpio_set(struct gpio_chip *chip, unsigned int offset,
2262+
int val)
22632263
{
22642264
struct vsc73xx *vsc = gpiochip_get_data(chip);
22652265
u32 tmp = val ? BIT(offset) : 0;
22662266

2267-
vsc73xx_update_bits(vsc, VSC73XX_BLOCK_SYSTEM, 0,
2268-
VSC73XX_GPIO, BIT(offset), tmp);
2267+
return vsc73xx_update_bits(vsc, VSC73XX_BLOCK_SYSTEM, 0,
2268+
VSC73XX_GPIO, BIT(offset), tmp);
22692269
}
22702270

22712271
static int vsc73xx_gpio_direction_output(struct gpio_chip *chip,
@@ -2317,7 +2317,7 @@ static int vsc73xx_gpio_probe(struct vsc73xx *vsc)
23172317
vsc->gc.parent = vsc->dev;
23182318
vsc->gc.base = -1;
23192319
vsc->gc.get = vsc73xx_gpio_get;
2320-
vsc->gc.set = vsc73xx_gpio_set;
2320+
vsc->gc.set_rv = vsc73xx_gpio_set;
23212321
vsc->gc.direction_input = vsc73xx_gpio_direction_input;
23222322
vsc->gc.direction_output = vsc73xx_gpio_direction_output;
23232323
vsc->gc.get_direction = vsc73xx_gpio_get_direction;

drivers/net/phy/qcom/qca807x.c

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -377,7 +377,7 @@ static int qca807x_gpio_get(struct gpio_chip *gc, unsigned int offset)
377377
return FIELD_GET(QCA807X_GPIO_FORCE_MODE_MASK, val);
378378
}
379379

380-
static void qca807x_gpio_set(struct gpio_chip *gc, unsigned int offset, int value)
380+
static int qca807x_gpio_set(struct gpio_chip *gc, unsigned int offset, int value)
381381
{
382382
struct qca807x_gpio_priv *priv = gpiochip_get_data(gc);
383383
u16 reg;
@@ -386,18 +386,19 @@ static void qca807x_gpio_set(struct gpio_chip *gc, unsigned int offset, int valu
386386
reg = QCA807X_MMD7_LED_FORCE_CTRL(offset);
387387

388388
val = phy_read_mmd(priv->phy, MDIO_MMD_AN, reg);
389+
if (val < 0)
390+
return val;
391+
389392
val &= ~QCA807X_GPIO_FORCE_MODE_MASK;
390393
val |= QCA807X_GPIO_FORCE_EN;
391394
val |= FIELD_PREP(QCA807X_GPIO_FORCE_MODE_MASK, value);
392395

393-
phy_write_mmd(priv->phy, MDIO_MMD_AN, reg, val);
396+
return phy_write_mmd(priv->phy, MDIO_MMD_AN, reg, val);
394397
}
395398

396399
static int qca807x_gpio_dir_out(struct gpio_chip *gc, unsigned int offset, int value)
397400
{
398-
qca807x_gpio_set(gc, offset, value);
399-
400-
return 0;
401+
return qca807x_gpio_set(gc, offset, value);
401402
}
402403

403404
static int qca807x_gpio(struct phy_device *phydev)
@@ -425,7 +426,7 @@ static int qca807x_gpio(struct phy_device *phydev)
425426
gc->get_direction = qca807x_gpio_get_direction;
426427
gc->direction_output = qca807x_gpio_dir_out;
427428
gc->get = qca807x_gpio_get;
428-
gc->set = qca807x_gpio_set;
429+
gc->set_rv = qca807x_gpio_set;
429430

430431
return devm_gpiochip_add_data(dev, gc, priv);
431432
}

0 commit comments

Comments
 (0)