Commit 3fbe3fe2 authored by Andy Shevchenko's avatar Andy Shevchenko Committed by Linus Walleij
Browse files

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: 71e4001a ("pinctrl: pinctrl-cy8c95x0: Fix regcache")
Signed-off-by: default avatarAndy Shevchenko <andriy.shevchenko@linux.intel.com>
Link: https://lore.kernel.org/20250203131506.3318201-3-andriy.shevchenko@linux.intel.com


Signed-off-by: default avatarLinus Walleij <linus.walleij@linaro.org>
parent 6f36f103
Loading
Loading
Loading
Loading
+10 −6
Original line number Diff line number Diff line
@@ -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)
{
	/*
	 * Only 12 registers are present per port (see Table 6 in the
	 * datasheet).
	 * Only 12 registers are present per port (see Table 6 in the datasheet).
	 */
	if (reg >= CY8C95X0_VIRTUAL && (reg % MUXED_STRIDE) < 12)
		return true;
	if (reg >= CY8C95X0_VIRTUAL && (reg % MUXED_STRIDE) >= 12)
		return false;

	switch (reg) {
	case 0x24 ... 0x27:
	case 0x31 ... 0x3f:
		return false;
	default:
		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)
{
	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) {
	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:
		return false;
	case 0x24 ... 0x27:
	case 0x31 ... 0x3f:
		return false;
	default:
		return true;