pinctrl: cy8c95x0: Avoid accessing reserved registers
The checks for vrtual registers in the cy8c95x0_readable_register()
and cy8c95x0_writeable_register() are not aligned and broken.
Fix that by explicitly avoiding reserved registers to be accessed.
Fixes: 71e4001a04
("pinctrl: pinctrl-cy8c95x0: Fix regcache")
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Link: https://lore.kernel.org/20250203131506.3318201-3-andriy.shevchenko@linux.intel.com
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
parent
6f36f103cf
commit
3fbe3fe287
1 changed files with 10 additions and 6 deletions
|
@ -328,14 +328,14 @@ static int cypress_get_pin_mask(struct cy8c95x0_pinctrl *chip, unsigned int pin)
|
||||||
static bool cy8c95x0_readable_register(struct device *dev, unsigned int reg)
|
static bool cy8c95x0_readable_register(struct device *dev, unsigned int reg)
|
||||||
{
|
{
|
||||||
/*
|
/*
|
||||||
* Only 12 registers are present per port (see Table 6 in the
|
* Only 12 registers are present per port (see Table 6 in the datasheet).
|
||||||
* datasheet).
|
|
||||||
*/
|
*/
|
||||||
if (reg >= CY8C95X0_VIRTUAL && (reg % MUXED_STRIDE) < 12)
|
if (reg >= CY8C95X0_VIRTUAL && (reg % MUXED_STRIDE) >= 12)
|
||||||
return true;
|
return false;
|
||||||
|
|
||||||
switch (reg) {
|
switch (reg) {
|
||||||
case 0x24 ... 0x27:
|
case 0x24 ... 0x27:
|
||||||
|
case 0x31 ... 0x3f:
|
||||||
return false;
|
return false;
|
||||||
default:
|
default:
|
||||||
return true;
|
return true;
|
||||||
|
@ -344,8 +344,11 @@ static bool cy8c95x0_readable_register(struct device *dev, unsigned int reg)
|
||||||
|
|
||||||
static bool cy8c95x0_writeable_register(struct device *dev, unsigned int reg)
|
static bool cy8c95x0_writeable_register(struct device *dev, unsigned int reg)
|
||||||
{
|
{
|
||||||
if (reg >= CY8C95X0_VIRTUAL)
|
/*
|
||||||
return true;
|
* Only 12 registers are present per port (see Table 6 in the datasheet).
|
||||||
|
*/
|
||||||
|
if (reg >= CY8C95X0_VIRTUAL && (reg % MUXED_STRIDE) >= 12)
|
||||||
|
return false;
|
||||||
|
|
||||||
switch (reg) {
|
switch (reg) {
|
||||||
case CY8C95X0_INPUT_(0) ... CY8C95X0_INPUT_(7):
|
case CY8C95X0_INPUT_(0) ... CY8C95X0_INPUT_(7):
|
||||||
|
@ -353,6 +356,7 @@ static bool cy8c95x0_writeable_register(struct device *dev, unsigned int reg)
|
||||||
case CY8C95X0_DEVID:
|
case CY8C95X0_DEVID:
|
||||||
return false;
|
return false;
|
||||||
case 0x24 ... 0x27:
|
case 0x24 ... 0x27:
|
||||||
|
case 0x31 ... 0x3f:
|
||||||
return false;
|
return false;
|
||||||
default:
|
default:
|
||||||
return true;
|
return true;
|
||||||
|
|
Loading…
Add table
Reference in a new issue