* [PATCH v3 00/10] pinctrl: cy8c95x0: Clean up series
@ 2025-02-05 9:51 Andy Shevchenko
2025-02-05 9:51 ` [PATCH v3 01/10] pinctrl: cy8c95x0: Use better bitmap APIs where appropriate Andy Shevchenko
` (10 more replies)
0 siblings, 11 replies; 12+ messages in thread
From: Andy Shevchenko @ 2025-02-05 9:51 UTC (permalink / raw)
To: Andy Shevchenko, linux-gpio, linux-kernel; +Cc: Patrick Rudolph, Linus Walleij
This a set of the cleanups I have collected so far while testing
the driver on Intel Galileo Gen 1 last year.
Changelog v3:
- fixed a typo in patch 1
- dropped applied patches
Changelog v2:
- dropped wrong patch (Patrick)
- reshuffled fixes from most important to less important (Linus)
- rebased on top of v6.14-rc1
Andy Shevchenko (10):
pinctrl: cy8c95x0: Use better bitmap APIs where appropriate
pinctrl: cy8c95x0; Switch to use for_each_set_clump8()
pinctrl: cy8c95x0: Transform to cy8c95x0_regmap_read_bits()
pinctrl: cy8c95x0: Remove redundant check in
cy8c95x0_regmap_update_bits_base()
pinctrl: cy8c95x0: Replace 'return ret' by 'return 0' in some cases
pinctrl: cy8c95x0: Initialise boolean variable with boolean values
pinctrl: cy8c95x0: Get rid of cy8c95x0_pinmux_direction() forward
declaration
pinctrl: cy8c95x0: Drop unneeded casting
pinctrl: cy8c95x0: Separate EEPROM related register definitios
pinctrl: cy8c95x0: Fix comment style
drivers/pinctrl/pinctrl-cy8c95x0.c | 191 +++++++++++++----------------
1 file changed, 88 insertions(+), 103 deletions(-)
--
2.43.0.rc1.1336.g36b5255a03ac
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v3 01/10] pinctrl: cy8c95x0: Use better bitmap APIs where appropriate
2025-02-05 9:51 [PATCH v3 00/10] pinctrl: cy8c95x0: Clean up series Andy Shevchenko
@ 2025-02-05 9:51 ` Andy Shevchenko
2025-02-05 9:51 ` [PATCH v3 02/10] pinctrl: cy8c95x0; Switch to use for_each_set_clump8() Andy Shevchenko
` (9 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Andy Shevchenko @ 2025-02-05 9:51 UTC (permalink / raw)
To: Andy Shevchenko, linux-gpio, linux-kernel; +Cc: Patrick Rudolph, Linus Walleij
There are bitmap_gather() and bitmap_scatter() that are factually
reimplemented in the driver. Use better bitmap APIs where appropriate.
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
drivers/pinctrl/pinctrl-cy8c95x0.c | 33 +++++++++++-------------------
1 file changed, 12 insertions(+), 21 deletions(-)
diff --git a/drivers/pinctrl/pinctrl-cy8c95x0.c b/drivers/pinctrl/pinctrl-cy8c95x0.c
index d73004b4a45e..f53dbcaf9a32 100644
--- a/drivers/pinctrl/pinctrl-cy8c95x0.c
+++ b/drivers/pinctrl/pinctrl-cy8c95x0.c
@@ -137,7 +137,7 @@ static const struct dmi_system_id cy8c95x0_dmi_acpi_irq_info[] = {
* @irq_trig_low: I/O bits affected by a low voltage level
* @irq_trig_high: I/O bits affected by a high voltage level
* @push_pull: I/O bits configured as push pull driver
- * @shiftmask: Mask used to compensate for Gport2 width
+ * @map: Mask used to compensate for Gport2 width
* @nport: Number of Gports in this chip
* @gpio_chip: gpiolib chip
* @driver_data: private driver data
@@ -158,7 +158,7 @@ struct cy8c95x0_pinctrl {
DECLARE_BITMAP(irq_trig_low, MAX_LINE);
DECLARE_BITMAP(irq_trig_high, MAX_LINE);
DECLARE_BITMAP(push_pull, MAX_LINE);
- DECLARE_BITMAP(shiftmask, MAX_LINE);
+ DECLARE_BITMAP(map, MAX_LINE);
unsigned int nport;
struct gpio_chip gpio_chip;
unsigned long driver_data;
@@ -622,13 +622,8 @@ static int cy8c95x0_write_regs_mask(struct cy8c95x0_pinctrl *chip, int reg,
int ret;
/* Add the 4 bit gap of Gport2 */
- bitmap_andnot(tmask, mask, chip->shiftmask, MAX_LINE);
- bitmap_shift_left(tmask, tmask, 4, MAX_LINE);
- bitmap_replace(tmask, tmask, mask, chip->shiftmask, BANK_SZ * 3);
-
- bitmap_andnot(tval, val, chip->shiftmask, MAX_LINE);
- bitmap_shift_left(tval, tval, 4, MAX_LINE);
- bitmap_replace(tval, tval, val, chip->shiftmask, BANK_SZ * 3);
+ bitmap_scatter(tmask, mask, chip->map, MAX_LINE);
+ bitmap_scatter(tval, val, chip->map, MAX_LINE);
for (unsigned int i = 0; i < chip->nport; i++) {
/* Skip over unused banks */
@@ -653,19 +648,13 @@ static int cy8c95x0_read_regs_mask(struct cy8c95x0_pinctrl *chip, int reg,
{
DECLARE_BITMAP(tmask, MAX_LINE);
DECLARE_BITMAP(tval, MAX_LINE);
- DECLARE_BITMAP(tmp, MAX_LINE);
int read_val;
u8 bits;
int ret;
/* Add the 4 bit gap of Gport2 */
- bitmap_andnot(tmask, mask, chip->shiftmask, MAX_LINE);
- bitmap_shift_left(tmask, tmask, 4, MAX_LINE);
- bitmap_replace(tmask, tmask, mask, chip->shiftmask, BANK_SZ * 3);
-
- bitmap_andnot(tval, val, chip->shiftmask, MAX_LINE);
- bitmap_shift_left(tval, tval, 4, MAX_LINE);
- bitmap_replace(tval, tval, val, chip->shiftmask, BANK_SZ * 3);
+ bitmap_scatter(tmask, mask, chip->map, MAX_LINE);
+ bitmap_scatter(tval, val, chip->map, MAX_LINE);
for (unsigned int i = 0; i < chip->nport; i++) {
/* Skip over unused banks */
@@ -685,8 +674,7 @@ static int cy8c95x0_read_regs_mask(struct cy8c95x0_pinctrl *chip, int reg,
}
/* Fill the 4 bit gap of Gport2 */
- bitmap_shift_right(tmp, tval, 4, MAX_LINE);
- bitmap_replace(val, tmp, tval, chip->shiftmask, MAX_LINE);
+ bitmap_gather(val, tval, chip->map, MAX_LINE);
return 0;
}
@@ -1486,8 +1474,11 @@ static int cy8c95x0_probe(struct i2c_client *client)
return PTR_ERR(chip->regmap);
bitmap_zero(chip->push_pull, MAX_LINE);
- bitmap_zero(chip->shiftmask, MAX_LINE);
- bitmap_set(chip->shiftmask, 0, 20);
+
+ /* Setup HW pins mapping */
+ bitmap_fill(chip->map, MAX_LINE);
+ bitmap_clear(chip->map, 20, 4);
+
mutex_init(&chip->i2c_lock);
if (dmi_first_match(cy8c95x0_dmi_acpi_irq_info)) {
--
2.43.0.rc1.1336.g36b5255a03ac
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v3 02/10] pinctrl: cy8c95x0; Switch to use for_each_set_clump8()
2025-02-05 9:51 [PATCH v3 00/10] pinctrl: cy8c95x0: Clean up series Andy Shevchenko
2025-02-05 9:51 ` [PATCH v3 01/10] pinctrl: cy8c95x0: Use better bitmap APIs where appropriate Andy Shevchenko
@ 2025-02-05 9:51 ` Andy Shevchenko
2025-02-05 9:51 ` [PATCH v3 03/10] pinctrl: cy8c95x0: Transform to cy8c95x0_regmap_read_bits() Andy Shevchenko
` (8 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Andy Shevchenko @ 2025-02-05 9:51 UTC (permalink / raw)
To: Andy Shevchenko, linux-gpio, linux-kernel; +Cc: Patrick Rudolph, Linus Walleij
for_each_set_clump8() has embedded check for unset clump to skip.
Switch driver to use for_each_set_clump8().
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
drivers/pinctrl/pinctrl-cy8c95x0.c | 24 +++++++++---------------
1 file changed, 9 insertions(+), 15 deletions(-)
diff --git a/drivers/pinctrl/pinctrl-cy8c95x0.c b/drivers/pinctrl/pinctrl-cy8c95x0.c
index f53dbcaf9a32..0eb570952f3f 100644
--- a/drivers/pinctrl/pinctrl-cy8c95x0.c
+++ b/drivers/pinctrl/pinctrl-cy8c95x0.c
@@ -617,21 +617,18 @@ static int cy8c95x0_write_regs_mask(struct cy8c95x0_pinctrl *chip, int reg,
{
DECLARE_BITMAP(tmask, MAX_LINE);
DECLARE_BITMAP(tval, MAX_LINE);
+ unsigned long bits, offset;
int write_val;
- u8 bits;
int ret;
/* Add the 4 bit gap of Gport2 */
bitmap_scatter(tmask, mask, chip->map, MAX_LINE);
bitmap_scatter(tval, val, chip->map, MAX_LINE);
- for (unsigned int i = 0; i < chip->nport; i++) {
- /* Skip over unused banks */
- bits = bitmap_get_value8(tmask, i * BANK_SZ);
- if (!bits)
- continue;
+ for_each_set_clump8(offset, bits, tmask, chip->tpin) {
+ unsigned int i = offset / 8;
- write_val = bitmap_get_value8(tval, i * BANK_SZ);
+ write_val = bitmap_get_value8(tval, offset);
ret = cy8c95x0_regmap_update_bits(chip, reg, i, bits, write_val);
if (ret < 0) {
@@ -648,19 +645,16 @@ static int cy8c95x0_read_regs_mask(struct cy8c95x0_pinctrl *chip, int reg,
{
DECLARE_BITMAP(tmask, MAX_LINE);
DECLARE_BITMAP(tval, MAX_LINE);
+ unsigned long bits, offset;
int read_val;
- u8 bits;
int ret;
/* Add the 4 bit gap of Gport2 */
bitmap_scatter(tmask, mask, chip->map, MAX_LINE);
bitmap_scatter(tval, val, chip->map, MAX_LINE);
- for (unsigned int i = 0; i < chip->nport; i++) {
- /* Skip over unused banks */
- bits = bitmap_get_value8(tmask, i * BANK_SZ);
- if (!bits)
- continue;
+ for_each_set_clump8(offset, bits, tmask, chip->tpin) {
+ unsigned int i = offset / 8;
ret = cy8c95x0_regmap_read(chip, reg, i, &read_val);
if (ret < 0) {
@@ -669,8 +663,8 @@ static int cy8c95x0_read_regs_mask(struct cy8c95x0_pinctrl *chip, int reg,
}
read_val &= bits;
- read_val |= bitmap_get_value8(tval, i * BANK_SZ) & ~bits;
- bitmap_set_value8(tval, read_val, i * BANK_SZ);
+ read_val |= bitmap_get_value8(tval, offset) & ~bits;
+ bitmap_set_value8(tval, read_val, offset);
}
/* Fill the 4 bit gap of Gport2 */
--
2.43.0.rc1.1336.g36b5255a03ac
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v3 03/10] pinctrl: cy8c95x0: Transform to cy8c95x0_regmap_read_bits()
2025-02-05 9:51 [PATCH v3 00/10] pinctrl: cy8c95x0: Clean up series Andy Shevchenko
2025-02-05 9:51 ` [PATCH v3 01/10] pinctrl: cy8c95x0: Use better bitmap APIs where appropriate Andy Shevchenko
2025-02-05 9:51 ` [PATCH v3 02/10] pinctrl: cy8c95x0; Switch to use for_each_set_clump8() Andy Shevchenko
@ 2025-02-05 9:51 ` Andy Shevchenko
2025-02-05 9:51 ` [PATCH v3 04/10] pinctrl: cy8c95x0: Remove redundant check in cy8c95x0_regmap_update_bits_base() Andy Shevchenko
` (7 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Andy Shevchenko @ 2025-02-05 9:51 UTC (permalink / raw)
To: Andy Shevchenko, linux-gpio, linux-kernel; +Cc: Patrick Rudolph, Linus Walleij
The returned value of cy8c95x0_regmap_read() is used always with
a bitmask being applied. Move that bitmasking code into the function.
At the same time transform it to cy8c95x0_regmap_read_bits() which
will be in align with the write and update counterparts.
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
drivers/pinctrl/pinctrl-cy8c95x0.c | 45 +++++++++++++++++-------------
1 file changed, 25 insertions(+), 20 deletions(-)
diff --git a/drivers/pinctrl/pinctrl-cy8c95x0.c b/drivers/pinctrl/pinctrl-cy8c95x0.c
index 0eb570952f3f..0d732e7a0868 100644
--- a/drivers/pinctrl/pinctrl-cy8c95x0.c
+++ b/drivers/pinctrl/pinctrl-cy8c95x0.c
@@ -575,12 +575,13 @@ static int cy8c95x0_regmap_update_bits(struct cy8c95x0_pinctrl *chip, unsigned i
}
/**
- * cy8c95x0_regmap_read() - reads a register using the regmap cache
+ * cy8c95x0_regmap_read_bits() - reads a register using the regmap cache
* @chip: The pinctrl to work on
* @reg: The register to read from. Can be direct access or muxed register.
* @port: The port to be used for muxed registers or quick path direct access
* registers. Otherwise unused.
- * @read_val: Value read from hardware or cache
+ * @mask: Bitmask to apply
+ * @val: Value read from hardware or cache
*
* This function handles the register reads from the direct access registers and
* the muxed registers while caching all register accesses, internally handling
@@ -590,10 +591,12 @@ static int cy8c95x0_regmap_update_bits(struct cy8c95x0_pinctrl *chip, unsigned i
*
* Return: 0 for successful request, else a corresponding error value
*/
-static int cy8c95x0_regmap_read(struct cy8c95x0_pinctrl *chip, unsigned int reg,
- unsigned int port, unsigned int *read_val)
+static int cy8c95x0_regmap_read_bits(struct cy8c95x0_pinctrl *chip, unsigned int reg,
+ unsigned int port, unsigned int mask, unsigned int *val)
{
- int off, ret;
+ unsigned int off;
+ unsigned int tmp;
+ int ret;
/* Registers behind the PORTSEL mux have their own range in regmap */
if (cy8c95x0_muxed_register(reg)) {
@@ -605,11 +608,14 @@ static int cy8c95x0_regmap_read(struct cy8c95x0_pinctrl *chip, unsigned int reg,
else
off = reg;
}
- guard(mutex)(&chip->i2c_lock);
- ret = regmap_read(chip->regmap, off, read_val);
+ scoped_guard(mutex, &chip->i2c_lock)
+ ret = regmap_read(chip->regmap, off, &tmp);
+ if (ret)
+ return ret;
- return ret;
+ *val = tmp & mask;
+ return 0;
}
static int cy8c95x0_write_regs_mask(struct cy8c95x0_pinctrl *chip, int reg,
@@ -646,7 +652,7 @@ static int cy8c95x0_read_regs_mask(struct cy8c95x0_pinctrl *chip, int reg,
DECLARE_BITMAP(tmask, MAX_LINE);
DECLARE_BITMAP(tval, MAX_LINE);
unsigned long bits, offset;
- int read_val;
+ unsigned int read_val;
int ret;
/* Add the 4 bit gap of Gport2 */
@@ -656,13 +662,12 @@ static int cy8c95x0_read_regs_mask(struct cy8c95x0_pinctrl *chip, int reg,
for_each_set_clump8(offset, bits, tmask, chip->tpin) {
unsigned int i = offset / 8;
- ret = cy8c95x0_regmap_read(chip, reg, i, &read_val);
+ ret = cy8c95x0_regmap_read_bits(chip, reg, i, bits, &read_val);
if (ret < 0) {
dev_err(chip->dev, "failed reading register %d, port %u: err %d\n", reg, i, ret);
return ret;
}
- read_val &= bits;
read_val |= bitmap_get_value8(tval, offset) & ~bits;
bitmap_set_value8(tval, read_val, offset);
}
@@ -699,10 +704,10 @@ static int cy8c95x0_gpio_get_value(struct gpio_chip *gc, unsigned int off)
struct cy8c95x0_pinctrl *chip = gpiochip_get_data(gc);
u8 port = cypress_get_port(chip, off);
u8 bit = cypress_get_pin_mask(chip, off);
- u32 reg_val;
+ unsigned int reg_val;
int ret;
- ret = cy8c95x0_regmap_read(chip, CY8C95X0_INPUT, port, ®_val);
+ ret = cy8c95x0_regmap_read_bits(chip, CY8C95X0_INPUT, port, bit, ®_val);
if (ret < 0) {
/*
* NOTE:
@@ -713,7 +718,7 @@ static int cy8c95x0_gpio_get_value(struct gpio_chip *gc, unsigned int off)
return 0;
}
- return !!(reg_val & bit);
+ return reg_val ? 1 : 0;
}
static void cy8c95x0_gpio_set_value(struct gpio_chip *gc, unsigned int off,
@@ -731,14 +736,14 @@ static int cy8c95x0_gpio_get_direction(struct gpio_chip *gc, unsigned int off)
struct cy8c95x0_pinctrl *chip = gpiochip_get_data(gc);
u8 port = cypress_get_port(chip, off);
u8 bit = cypress_get_pin_mask(chip, off);
- u32 reg_val;
+ unsigned int reg_val;
int ret;
- ret = cy8c95x0_regmap_read(chip, CY8C95X0_DIRECTION, port, ®_val);
+ ret = cy8c95x0_regmap_read_bits(chip, CY8C95X0_DIRECTION, port, bit, ®_val);
if (ret < 0)
return ret;
- if (reg_val & bit)
+ if (reg_val)
return GPIO_LINE_DIRECTION_IN;
return GPIO_LINE_DIRECTION_OUT;
@@ -751,8 +756,8 @@ static int cy8c95x0_gpio_get_pincfg(struct cy8c95x0_pinctrl *chip,
enum pin_config_param param = pinconf_to_config_param(*config);
u8 port = cypress_get_port(chip, off);
u8 bit = cypress_get_pin_mask(chip, off);
+ unsigned int reg_val;
unsigned int reg;
- u32 reg_val;
u16 arg = 0;
int ret;
@@ -809,11 +814,11 @@ static int cy8c95x0_gpio_get_pincfg(struct cy8c95x0_pinctrl *chip,
* Writing 1 to one of the drive mode registers will automatically
* clear conflicting set bits in the other drive mode registers.
*/
- ret = cy8c95x0_regmap_read(chip, reg, port, ®_val);
+ ret = cy8c95x0_regmap_read_bits(chip, reg, port, bit, ®_val);
if (ret < 0)
return ret;
- if (reg_val & bit)
+ if (reg_val)
arg = 1;
if (param == PIN_CONFIG_OUTPUT_ENABLE)
arg = !arg;
--
2.43.0.rc1.1336.g36b5255a03ac
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v3 04/10] pinctrl: cy8c95x0: Remove redundant check in cy8c95x0_regmap_update_bits_base()
2025-02-05 9:51 [PATCH v3 00/10] pinctrl: cy8c95x0: Clean up series Andy Shevchenko
` (2 preceding siblings ...)
2025-02-05 9:51 ` [PATCH v3 03/10] pinctrl: cy8c95x0: Transform to cy8c95x0_regmap_read_bits() Andy Shevchenko
@ 2025-02-05 9:51 ` Andy Shevchenko
2025-02-05 9:51 ` [PATCH v3 05/10] pinctrl: cy8c95x0: Replace 'return ret' by 'return 0' in some cases Andy Shevchenko
` (6 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Andy Shevchenko @ 2025-02-05 9:51 UTC (permalink / raw)
To: Andy Shevchenko, linux-gpio, linux-kernel; +Cc: Patrick Rudolph, Linus Walleij
The function is never called with the PORTSEL register in the argument.
Drop unneeded check, but rescue a comment. While at it, drop inline
and allow any compiler to choose better stragy (note, that inline in
C code is only a recomendation to most of the modern compilers anyway).
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
drivers/pinctrl/pinctrl-cy8c95x0.c | 16 +++++-----------
1 file changed, 5 insertions(+), 11 deletions(-)
diff --git a/drivers/pinctrl/pinctrl-cy8c95x0.c b/drivers/pinctrl/pinctrl-cy8c95x0.c
index 0d732e7a0868..04b534b950d0 100644
--- a/drivers/pinctrl/pinctrl-cy8c95x0.c
+++ b/drivers/pinctrl/pinctrl-cy8c95x0.c
@@ -477,20 +477,14 @@ static const struct regmap_config cy8c9520_i2c_regmap = {
#endif
};
-static inline int cy8c95x0_regmap_update_bits_base(struct cy8c95x0_pinctrl *chip,
- unsigned int reg,
- unsigned int port,
- unsigned int mask,
- unsigned int val,
- bool *change, bool async,
- bool force)
+/* Caller should never modify PORTSEL directly */
+static int cy8c95x0_regmap_update_bits_base(struct cy8c95x0_pinctrl *chip,
+ unsigned int reg, unsigned int port,
+ unsigned int mask, unsigned int val,
+ bool *change, bool async, bool force)
{
int ret, off, i;
- /* Caller should never modify PORTSEL directly */
- if (reg == CY8C95X0_PORTSEL)
- return -EINVAL;
-
/* Registers behind the PORTSEL mux have their own range in regmap */
if (cy8c95x0_muxed_register(reg)) {
off = CY8C95X0_MUX_REGMAP_TO_OFFSET(reg, port);
--
2.43.0.rc1.1336.g36b5255a03ac
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v3 05/10] pinctrl: cy8c95x0: Replace 'return ret' by 'return 0' in some cases
2025-02-05 9:51 [PATCH v3 00/10] pinctrl: cy8c95x0: Clean up series Andy Shevchenko
` (3 preceding siblings ...)
2025-02-05 9:51 ` [PATCH v3 04/10] pinctrl: cy8c95x0: Remove redundant check in cy8c95x0_regmap_update_bits_base() Andy Shevchenko
@ 2025-02-05 9:51 ` Andy Shevchenko
2025-02-05 9:51 ` [PATCH v3 06/10] pinctrl: cy8c95x0: Initialise boolean variable with boolean values Andy Shevchenko
` (5 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Andy Shevchenko @ 2025-02-05 9:51 UTC (permalink / raw)
To: Andy Shevchenko, linux-gpio, linux-kernel; +Cc: Patrick Rudolph, Linus Walleij
When it's known that the returned value can't be non-zero,
use 'return 0' explicitly.
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
drivers/pinctrl/pinctrl-cy8c95x0.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/pinctrl/pinctrl-cy8c95x0.c b/drivers/pinctrl/pinctrl-cy8c95x0.c
index 04b534b950d0..19f92ec83871 100644
--- a/drivers/pinctrl/pinctrl-cy8c95x0.c
+++ b/drivers/pinctrl/pinctrl-cy8c95x0.c
@@ -517,7 +517,7 @@ static int cy8c95x0_regmap_update_bits_base(struct cy8c95x0_pinctrl *chip,
regcache_cache_only(chip->regmap, false);
}
- return ret;
+ return 0;
}
/**
@@ -1286,7 +1286,7 @@ static int cy8c95x0_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin,
unsigned long *configs, unsigned int num_configs)
{
struct cy8c95x0_pinctrl *chip = pinctrl_dev_get_drvdata(pctldev);
- int ret = 0;
+ int ret;
int i;
for (i = 0; i < num_configs; i++) {
@@ -1295,7 +1295,7 @@ static int cy8c95x0_pinconf_set(struct pinctrl_dev *pctldev, unsigned int pin,
return ret;
}
- return ret;
+ return 0;
}
static const struct pinconf_ops cy8c95x0_pinconf_ops = {
--
2.43.0.rc1.1336.g36b5255a03ac
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v3 06/10] pinctrl: cy8c95x0: Initialise boolean variable with boolean values
2025-02-05 9:51 [PATCH v3 00/10] pinctrl: cy8c95x0: Clean up series Andy Shevchenko
` (4 preceding siblings ...)
2025-02-05 9:51 ` [PATCH v3 05/10] pinctrl: cy8c95x0: Replace 'return ret' by 'return 0' in some cases Andy Shevchenko
@ 2025-02-05 9:51 ` Andy Shevchenko
2025-02-05 9:51 ` [PATCH v3 07/10] pinctrl: cy8c95x0: Get rid of cy8c95x0_pinmux_direction() forward declaration Andy Shevchenko
` (4 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Andy Shevchenko @ 2025-02-05 9:51 UTC (permalink / raw)
To: Andy Shevchenko, linux-gpio, linux-kernel; +Cc: Patrick Rudolph, Linus Walleij
The 'ret' variable in cy8c95x0_irq_handler() is defined as bool,
but is intialised with integers. Avoid implicit castings and
initialise boolean variable with boolean values.
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
drivers/pinctrl/pinctrl-cy8c95x0.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/pinctrl/pinctrl-cy8c95x0.c b/drivers/pinctrl/pinctrl-cy8c95x0.c
index 19f92ec83871..7e79f20f4d78 100644
--- a/drivers/pinctrl/pinctrl-cy8c95x0.c
+++ b/drivers/pinctrl/pinctrl-cy8c95x0.c
@@ -1076,7 +1076,7 @@ static irqreturn_t cy8c95x0_irq_handler(int irq, void *devid)
if (!ret)
return IRQ_RETVAL(0);
- ret = 0;
+ ret = false;
for_each_set_bit(level, pending, MAX_LINE) {
/* Already accounted for 4bit gap in GPort2 */
nested_irq = irq_find_mapping(gc->irq.domain, level);
@@ -1095,7 +1095,7 @@ static irqreturn_t cy8c95x0_irq_handler(int irq, void *devid)
else
handle_nested_irq(nested_irq);
- ret = 1;
+ ret = true;
}
return IRQ_RETVAL(ret);
--
2.43.0.rc1.1336.g36b5255a03ac
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v3 07/10] pinctrl: cy8c95x0: Get rid of cy8c95x0_pinmux_direction() forward declaration
2025-02-05 9:51 [PATCH v3 00/10] pinctrl: cy8c95x0: Clean up series Andy Shevchenko
` (5 preceding siblings ...)
2025-02-05 9:51 ` [PATCH v3 06/10] pinctrl: cy8c95x0: Initialise boolean variable with boolean values Andy Shevchenko
@ 2025-02-05 9:51 ` Andy Shevchenko
2025-02-05 9:51 ` [PATCH v3 08/10] pinctrl: cy8c95x0: Drop unneeded casting Andy Shevchenko
` (3 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Andy Shevchenko @ 2025-02-05 9:51 UTC (permalink / raw)
To: Andy Shevchenko, linux-gpio, linux-kernel; +Cc: Patrick Rudolph, Linus Walleij
The function is used before being defined. Just move it up enough to
get rid of forward declaration.
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
drivers/pinctrl/pinctrl-cy8c95x0.c | 54 ++++++++++++++----------------
1 file changed, 25 insertions(+), 29 deletions(-)
diff --git a/drivers/pinctrl/pinctrl-cy8c95x0.c b/drivers/pinctrl/pinctrl-cy8c95x0.c
index 7e79f20f4d78..3f2bdaea58b4 100644
--- a/drivers/pinctrl/pinctrl-cy8c95x0.c
+++ b/drivers/pinctrl/pinctrl-cy8c95x0.c
@@ -310,9 +310,6 @@ static const char * const cy8c95x0_groups[] = {
"gp77",
};
-static int cy8c95x0_pinmux_direction(struct cy8c95x0_pinctrl *chip,
- unsigned int pin, bool input);
-
static inline u8 cypress_get_port(struct cy8c95x0_pinctrl *chip, unsigned int pin)
{
/* Account for GPORT2 which only has 4 bits */
@@ -672,6 +669,31 @@ static int cy8c95x0_read_regs_mask(struct cy8c95x0_pinctrl *chip, int reg,
return 0;
}
+static int cy8c95x0_pinmux_direction(struct cy8c95x0_pinctrl *chip, unsigned int pin, bool input)
+{
+ u8 port = cypress_get_port(chip, pin);
+ u8 bit = cypress_get_pin_mask(chip, pin);
+ int ret;
+
+ ret = cy8c95x0_regmap_write_bits(chip, CY8C95X0_DIRECTION, port, bit, input ? bit : 0);
+ if (ret)
+ return ret;
+
+ /*
+ * Disable driving the pin by forcing it to HighZ. Only setting
+ * the direction register isn't sufficient in Push-Pull mode.
+ */
+ if (input && test_bit(pin, chip->push_pull)) {
+ ret = cy8c95x0_regmap_write_bits(chip, CY8C95X0_DRV_HIZ, port, bit, bit);
+ if (ret)
+ return ret;
+
+ __clear_bit(pin, chip->push_pull);
+ }
+
+ return 0;
+}
+
static int cy8c95x0_gpio_direction_input(struct gpio_chip *gc, unsigned int off)
{
return pinctrl_gpio_direction_input(gc, off);
@@ -1229,32 +1251,6 @@ static int cy8c95x0_gpio_request_enable(struct pinctrl_dev *pctldev,
return cy8c95x0_set_mode(chip, pin, false);
}
-static int cy8c95x0_pinmux_direction(struct cy8c95x0_pinctrl *chip,
- unsigned int pin, bool input)
-{
- u8 port = cypress_get_port(chip, pin);
- u8 bit = cypress_get_pin_mask(chip, pin);
- int ret;
-
- ret = cy8c95x0_regmap_write_bits(chip, CY8C95X0_DIRECTION, port, bit, input ? bit : 0);
- if (ret)
- return ret;
-
- /*
- * Disable driving the pin by forcing it to HighZ. Only setting
- * the direction register isn't sufficient in Push-Pull mode.
- */
- if (input && test_bit(pin, chip->push_pull)) {
- ret = cy8c95x0_regmap_write_bits(chip, CY8C95X0_DRV_HIZ, port, bit, bit);
- if (ret)
- return ret;
-
- __clear_bit(pin, chip->push_pull);
- }
-
- return 0;
-}
-
static int cy8c95x0_gpio_set_direction(struct pinctrl_dev *pctldev,
struct pinctrl_gpio_range *range,
unsigned int pin, bool input)
--
2.43.0.rc1.1336.g36b5255a03ac
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v3 08/10] pinctrl: cy8c95x0: Drop unneeded casting
2025-02-05 9:51 [PATCH v3 00/10] pinctrl: cy8c95x0: Clean up series Andy Shevchenko
` (6 preceding siblings ...)
2025-02-05 9:51 ` [PATCH v3 07/10] pinctrl: cy8c95x0: Get rid of cy8c95x0_pinmux_direction() forward declaration Andy Shevchenko
@ 2025-02-05 9:51 ` Andy Shevchenko
2025-02-05 9:51 ` [PATCH v3 09/10] pinctrl: cy8c95x0: Separate EEPROM related register definitios Andy Shevchenko
` (2 subsequent siblings)
10 siblings, 0 replies; 12+ messages in thread
From: Andy Shevchenko @ 2025-02-05 9:51 UTC (permalink / raw)
To: Andy Shevchenko, linux-gpio, linux-kernel; +Cc: Patrick Rudolph, Linus Walleij
The 'arg' variable in cy8c95x0_gpio_get_pincfg() is already type of u16.
No need to cast it, so drop unneeded casting.
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
drivers/pinctrl/pinctrl-cy8c95x0.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/pinctrl/pinctrl-cy8c95x0.c b/drivers/pinctrl/pinctrl-cy8c95x0.c
index 3f2bdaea58b4..4b683401cae1 100644
--- a/drivers/pinctrl/pinctrl-cy8c95x0.c
+++ b/drivers/pinctrl/pinctrl-cy8c95x0.c
@@ -839,7 +839,7 @@ static int cy8c95x0_gpio_get_pincfg(struct cy8c95x0_pinctrl *chip,
if (param == PIN_CONFIG_OUTPUT_ENABLE)
arg = !arg;
- *config = pinconf_to_config_packed(param, (u16)arg);
+ *config = pinconf_to_config_packed(param, arg);
return 0;
}
--
2.43.0.rc1.1336.g36b5255a03ac
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v3 09/10] pinctrl: cy8c95x0: Separate EEPROM related register definitios
2025-02-05 9:51 [PATCH v3 00/10] pinctrl: cy8c95x0: Clean up series Andy Shevchenko
` (7 preceding siblings ...)
2025-02-05 9:51 ` [PATCH v3 08/10] pinctrl: cy8c95x0: Drop unneeded casting Andy Shevchenko
@ 2025-02-05 9:51 ` Andy Shevchenko
2025-02-05 9:51 ` [PATCH v3 10/10] pinctrl: cy8c95x0: Fix comment style Andy Shevchenko
2025-02-16 23:18 ` [PATCH v3 00/10] pinctrl: cy8c95x0: Clean up series Linus Walleij
10 siblings, 0 replies; 12+ messages in thread
From: Andy Shevchenko @ 2025-02-05 9:51 UTC (permalink / raw)
To: Andy Shevchenko, linux-gpio, linux-kernel; +Cc: Patrick Rudolph, Linus Walleij
Currently it's not easy to see at a glance the group of the registers
that are per port. Add a blank line and a comment to make it better.
Also add a missing definition for one of the EEPROM related registers.
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
drivers/pinctrl/pinctrl-cy8c95x0.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/pinctrl/pinctrl-cy8c95x0.c b/drivers/pinctrl/pinctrl-cy8c95x0.c
index 4b683401cae1..6a2c7343bf55 100644
--- a/drivers/pinctrl/pinctrl-cy8c95x0.c
+++ b/drivers/pinctrl/pinctrl-cy8c95x0.c
@@ -40,6 +40,7 @@
/* Port Select configures the port */
#define CY8C95X0_PORTSEL 0x18
+
/* Port settings, write PORTSEL first */
#define CY8C95X0_INTMASK 0x19
#define CY8C95X0_SELPWM 0x1A
@@ -53,6 +54,9 @@
#define CY8C95X0_DRV_PP_FAST 0x21
#define CY8C95X0_DRV_PP_SLOW 0x22
#define CY8C95X0_DRV_HIZ 0x23
+
+/* Internal device configuration */
+#define CY8C95X0_ENABLE_WDE 0x2D
#define CY8C95X0_DEVID 0x2E
#define CY8C95X0_WATCHDOG 0x2F
#define CY8C95X0_COMMAND 0x30
--
2.43.0.rc1.1336.g36b5255a03ac
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v3 10/10] pinctrl: cy8c95x0: Fix comment style
2025-02-05 9:51 [PATCH v3 00/10] pinctrl: cy8c95x0: Clean up series Andy Shevchenko
` (8 preceding siblings ...)
2025-02-05 9:51 ` [PATCH v3 09/10] pinctrl: cy8c95x0: Separate EEPROM related register definitios Andy Shevchenko
@ 2025-02-05 9:51 ` Andy Shevchenko
2025-02-16 23:18 ` [PATCH v3 00/10] pinctrl: cy8c95x0: Clean up series Linus Walleij
10 siblings, 0 replies; 12+ messages in thread
From: Andy Shevchenko @ 2025-02-05 9:51 UTC (permalink / raw)
To: Andy Shevchenko, linux-gpio, linux-kernel; +Cc: Patrick Rudolph, Linus Walleij
One comment style is not aligned with the rest. Fix that.
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
drivers/pinctrl/pinctrl-cy8c95x0.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/pinctrl/pinctrl-cy8c95x0.c b/drivers/pinctrl/pinctrl-cy8c95x0.c
index 6a2c7343bf55..3cfbcaee9e65 100644
--- a/drivers/pinctrl/pinctrl-cy8c95x0.c
+++ b/drivers/pinctrl/pinctrl-cy8c95x0.c
@@ -502,7 +502,8 @@ static int cy8c95x0_regmap_update_bits_base(struct cy8c95x0_pinctrl *chip,
if (ret < 0)
return ret;
- /* Mimic what hardware does and update the cache when a WC bit is written.
+ /*
+ * Mimic what hardware does and update the cache when a WC bit is written.
* Allows to mark the registers as non-volatile and reduces I/O cycles.
*/
if (cy8c95x0_wc_register(reg) && (mask & val)) {
--
2.43.0.rc1.1336.g36b5255a03ac
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v3 00/10] pinctrl: cy8c95x0: Clean up series
2025-02-05 9:51 [PATCH v3 00/10] pinctrl: cy8c95x0: Clean up series Andy Shevchenko
` (9 preceding siblings ...)
2025-02-05 9:51 ` [PATCH v3 10/10] pinctrl: cy8c95x0: Fix comment style Andy Shevchenko
@ 2025-02-16 23:18 ` Linus Walleij
10 siblings, 0 replies; 12+ messages in thread
From: Linus Walleij @ 2025-02-16 23:18 UTC (permalink / raw)
To: Andy Shevchenko; +Cc: linux-gpio, linux-kernel, Patrick Rudolph
On Wed, Feb 5, 2025 at 10:52 AM Andy Shevchenko
<andriy.shevchenko@linux.intel.com> wrote:
> This a set of the cleanups I have collected so far while testing
> the driver on Intel Galileo Gen 1 last year.
Patches applied now that -rc3 is out!
Yours,
Linus Walleij
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2025-02-16 23:18 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-02-05 9:51 [PATCH v3 00/10] pinctrl: cy8c95x0: Clean up series Andy Shevchenko
2025-02-05 9:51 ` [PATCH v3 01/10] pinctrl: cy8c95x0: Use better bitmap APIs where appropriate Andy Shevchenko
2025-02-05 9:51 ` [PATCH v3 02/10] pinctrl: cy8c95x0; Switch to use for_each_set_clump8() Andy Shevchenko
2025-02-05 9:51 ` [PATCH v3 03/10] pinctrl: cy8c95x0: Transform to cy8c95x0_regmap_read_bits() Andy Shevchenko
2025-02-05 9:51 ` [PATCH v3 04/10] pinctrl: cy8c95x0: Remove redundant check in cy8c95x0_regmap_update_bits_base() Andy Shevchenko
2025-02-05 9:51 ` [PATCH v3 05/10] pinctrl: cy8c95x0: Replace 'return ret' by 'return 0' in some cases Andy Shevchenko
2025-02-05 9:51 ` [PATCH v3 06/10] pinctrl: cy8c95x0: Initialise boolean variable with boolean values Andy Shevchenko
2025-02-05 9:51 ` [PATCH v3 07/10] pinctrl: cy8c95x0: Get rid of cy8c95x0_pinmux_direction() forward declaration Andy Shevchenko
2025-02-05 9:51 ` [PATCH v3 08/10] pinctrl: cy8c95x0: Drop unneeded casting Andy Shevchenko
2025-02-05 9:51 ` [PATCH v3 09/10] pinctrl: cy8c95x0: Separate EEPROM related register definitios Andy Shevchenko
2025-02-05 9:51 ` [PATCH v3 10/10] pinctrl: cy8c95x0: Fix comment style Andy Shevchenko
2025-02-16 23:18 ` [PATCH v3 00/10] pinctrl: cy8c95x0: Clean up series Linus Walleij
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).