On Thu, May 16, 2024 at 8:25 AM Alexander Stein <alexander.stein@xxxxxxxxxxxxxxx> wrote: > > Most registers are read-writable, but some are only RO or even WO. > regmap does not support using readable_reg and wr_table when outputting > in debugfs, so switch to writeable_reg. > First check for RO or WO registers and fallback tc_readable_reg() for the > leftover RW registers. > > Signed-off-by: Alexander Stein <alexander.stein@xxxxxxxxxxxxxxx> > --- > drivers/gpu/drm/bridge/tc358767.c | 40 ++++++++++++++++++++----------- > 1 file changed, 26 insertions(+), 14 deletions(-) > > diff --git a/drivers/gpu/drm/bridge/tc358767.c b/drivers/gpu/drm/bridge/tc358767.c > index 8874713bdd4a4..04c98ab1991bd 100644 > --- a/drivers/gpu/drm/bridge/tc358767.c > +++ b/drivers/gpu/drm/bridge/tc358767.c > @@ -2086,19 +2086,31 @@ static const struct regmap_access_table tc_precious_table = { > .n_yes_ranges = ARRAY_SIZE(tc_precious_ranges), > }; > > -static const struct regmap_range tc_non_writeable_ranges[] = { > - regmap_reg_range(PPI_BUSYPPI, PPI_BUSYPPI), > - regmap_reg_range(DSI_BUSYDSI, DSI_BUSYDSI), > - regmap_reg_range(DSI_LANESTATUS0, DSI_INTSTATUS), > - regmap_reg_range(TC_IDREG, SYSSTAT), > - regmap_reg_range(GPIOI, GPIOI), > - regmap_reg_range(DP0_LTSTAT, DP0_SNKLTCHGREQ), > -}; > - > -static const struct regmap_access_table tc_writeable_table = { > - .no_ranges = tc_non_writeable_ranges, > - .n_no_ranges = ARRAY_SIZE(tc_non_writeable_ranges), > -}; > +static bool tc_writeable_reg(struct device *dev, unsigned int reg) > +{ > + /* RO reg */ > + switch (reg) { > + case PPI_BUSYPPI: > + case DSI_BUSYDSI: > + case DSI_LANESTATUS0: > + case DSI_LANESTATUS1: > + case DSI_INTSTATUS: > + case TC_IDREG: > + case SYSBOOT: > + case SYSSTAT: > + case GPIOI: > + case DP0_LTSTAT: > + case DP0_SNKLTCHGREQ: > + return false; > + } > + /* WO reg */ > + switch (reg) { > + case DSI_STARTDSI: > + case DSI_INTCLR: > + return true; > + } > + return tc_readable_reg(dev, reg); > +} > > static const struct regmap_config tc_regmap_config = { > .name = "tc358767", > @@ -2108,9 +2120,9 @@ static const struct regmap_config tc_regmap_config = { > .max_register = PLL_DBG, > .cache_type = REGCACHE_MAPLE, > .readable_reg = tc_readable_reg, > + .writeable_reg = tc_writeable_reg, > .volatile_table = &tc_volatile_table, > .precious_table = &tc_precious_table, > - .wr_table = &tc_writeable_table, > .reg_format_endian = REGMAP_ENDIAN_BIG, > .val_format_endian = REGMAP_ENDIAN_LITTLE, > }; > -- > 2.34.1 > Reviewed-by: Robert Foss <rfoss@xxxxxxxxxx>