On 25/09/26 15:40, Andy Shevchenko wrote:
On Fri, Sep 25, 2026 at 03:29:27PM +0530, Aniket Limaye wrote:
On 25/09/26 15:11, Andy Shevchenko wrote:
On Fri, Sep 25, 2026 at 12:26:27PM +0530, Aniket Limaye wrote:
...

Still doesn't look good. The current register layout may be left as is. What
you need is translate it in the respective regmap callbacks in case we are
enumerated on the different IP. Also possible to have a different regmap
config for the different HW where you translate them only in one place.
Is it confusing to keep using existing offsets in regmap_read/write() call
sites for TDA54, and let the regmap silently handle the translation?

Given that we do *not* have any new registers in use on the tda54 version
that were not there in the original one, I guess it works... will send a v4
as per your suggestion.
Depends on the mapping. Your series also forgot to provide the differences
Check this as an example: e539f435cb9c ("spi: dw: Add support for DesignWare 
DWC_ssi").

Ahh sorry about that, will remember to add a clean mapping in cover letter of next version.

For now here are the structural differences:

1.  Reg offsets  Existing        New TDA54

    [DW_IC_CON]                     0x00           0x2c
    [DW_IC_TAR]                     0x04            0x30
    [DW_IC_SAR]                     0x08            0x34
    [DW_IC_DATA_CMD]                0x10            0x80
    [DW_IC_SS_SCL_HCNT]             0x14            0x4c
    [DW_IC_SS_SCL_LCNT]             0x18            0x50
    [DW_IC_FS_SCL_HCNT]             0x1c            0x4c  /* same as SS */
    [DW_IC_FS_SCL_LCNT]             0x20            0x50  /* same as SS */
    [DW_IC_HS_SCL_HCNT]             0x24         0x54
    [DW_IC_HS_SCL_LCNT]             0x28            0x58
    [DW_IC_INTR_STAT]               0x2c            0xc0
    [DW_IC_INTR_MASK]               0x30            0xc4
    [DW_IC_RAW_INTR_STAT]           0x34            0xc8
    [DW_IC_RX_TL]                   0x38            0x84
    [DW_IC_TX_TL]                   0x3c            0x88
    [DW_IC_CLR_INTR]                0x40            0xcc
    [DW_IC_CLR_RX_UNDER]            0x44            NA
    [DW_IC_CLR_RX_OVER]             0x48            NA
    [DW_IC_CLR_TX_OVER]             0x4c            NA
    [DW_IC_CLR_RD_REQ]              0x50            NA
    [DW_IC_CLR_TX_ABRT]             0x54            NA
    [DW_IC_CLR_RX_DONE]             0x58            NA
    [DW_IC_CLR_ACTIVITY]            0x5c            NA
    [DW_IC_CLR_STOP_DET]            0x60            NA
    [DW_IC_CLR_START_DET]           0x64            NA
    [DW_IC_CLR_GEN_CALL]            0x68            NA
    [DW_IC_ENABLE]                  0x6c            0x04
    [DW_IC_STATUS]                  0x70            0xd8
    [DW_IC_TXFLR]                   0x74            0xdc
    [DW_IC_RXFLR]                   0x78            0xe0
    [DW_IC_SDA_HOLD]                0x7c            0x5c
    [DW_IC_TX_ABRT_SOURCE]          0x80            0xd4
    [DW_IC_ENABLE_STATUS]           0x9c            0xd0
    [DW_IC_CLR_RESTART_DET]         0xa8            NA
    [DW_IC_SMBUS_INTR_STAT]         0xc8            NA
    [DW_IC_SMBUS_INTR_MASK]         0xcc            NA
    [DW_IC_CLR_SMBUS_INTR]          0xd4            NA
    [DW_IC_COMP_PARAM_1]            0xf4            NA
    [DW_IC_COMP_VERSION]            0xf8            0x100
    [DW_IC_COMP_TYPE]               0xfc            0x104

2. DW_IC_CON bitfields:

    DW_IC_CON_MASTER BIT(0)                  BIT(0)
    DW_IC_CON_SPEED_STD                 (1 << 1)       (1 << 4)
    DW_IC_CON_SPEED_FAST                (2 << 1)       (2 << 4)
    DW_IC_CON_SPEED_HIGH                (3 << 1)       (3 << 4)
    DW_IC_CON_SPEED_MASK                GENMASK(2, 1)  GENMASK(5, 4)
    DW_IC_CON_10BITADDR_SLAVE           BIT(3) BIT(8)
    DW_IC_CON_10BITADDR_MASTER          BIT(4) BIT(9)
    DW_IC_CON_RESTART_EN                BIT(5) NA
    DW_IC_CON_SLAVE_DISABLE             BIT(6) NA
    DW_IC_CON_STOP_DET_IFADDRESSED      BIT(7) BIT(10)
    DW_IC_CON_TX_EMPTY_CTRL             BIT(8) BIT(11)
    DW_IC_CON_RX_FIFO_FULL_HLD_CTRL     BIT(9) BIT(12)
    DW_IC_CON_BUS_CLEAR_CTRL            BIT(11)  BIT(14)

3. To clear INTR,  Read DW_IC_CLR_* reg    Write bit to DW_IC_CLR_INTR

As you can see, it's an entirely different mapping, which is why I had 2 independent enum -> reg offset maps instead of offset -> offset translation.
Similarly, selecting a CON register bitfield layout too.

Let me know what you would prefer based on this...

Thanks,
Aniket

Reply via email to