Moving the register definitions to a global header file
include/linux/designware_i2c.h. That removes the need to
duplicate them in the adaptation layers for this driver
outside of drivers/i2c/busses/. There is at least one of
those in drivers/gpu/drm/xe/xe_i2c.c.

Suggested-by: Andy Shevchenko <[email protected]>
Suggested-by: Raag Jadav <[email protected]>
Reviewed-by: Raag Jadav <[email protected]>
Reviewed-by: Mika Westerberg <[email protected]>
Signed-off-by: Heikki Krogerus <[email protected]>
---
 MAINTAINERS                                |   1 +
 drivers/i2c/busses/i2c-designware-common.c |   1 +
 drivers/i2c/busses/i2c-designware-core.h   |  84 +---------------
 drivers/i2c/busses/i2c-designware-master.c |   1 +
 include/linux/designware_i2c.h             | 107 +++++++++++++++++++++
 5 files changed, 111 insertions(+), 83 deletions(-)
 create mode 100644 include/linux/designware_i2c.h

diff --git a/MAINTAINERS b/MAINTAINERS
index 4f176bcaa09e4..ca1dd05e79c65 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -25947,6 +25947,7 @@ R:      Andy Shevchenko 
<[email protected]>
 L:     [email protected]
 S:     Supported
 F:     drivers/i2c/busses/i2c-designware-*
+F:     include/linux/designware_i2c.h
 
 SYNOPSYS DESIGNWARE I2C DRIVER - AMDISP
 M:     Nirujogi Pratap <[email protected]>
diff --git a/drivers/i2c/busses/i2c-designware-common.c 
b/drivers/i2c/busses/i2c-designware-common.c
index 4dc57fd561703..1e5aba28e4942 100644
--- a/drivers/i2c/busses/i2c-designware-common.c
+++ b/drivers/i2c/busses/i2c-designware-common.c
@@ -16,6 +16,7 @@
 #include <linux/clk.h>
 #include <linux/delay.h>
 #include <linux/device.h>
+#include <linux/designware_i2c.h>
 #include <linux/err.h>
 #include <linux/errno.h>
 #include <linux/export.h>
diff --git a/drivers/i2c/busses/i2c-designware-core.h 
b/drivers/i2c/busses/i2c-designware-core.h
index 9d8d104cc3911..dfb6aa41e3f4a 100644
--- a/drivers/i2c/busses/i2c-designware-core.h
+++ b/drivers/i2c/busses/i2c-designware-core.h
@@ -11,6 +11,7 @@
 
 #include <linux/bits.h>
 #include <linux/completion.h>
+#include <linux/designware_i2c.h>
 #include <linux/errno.h>
 #include <linux/i2c.h>
 #include <linux/irqreturn.h>
@@ -25,23 +26,6 @@
                                                 I2C_FUNC_SMBUS_BLOCK_DATA | \
                                                 I2C_FUNC_SMBUS_I2C_BLOCK)
 
-#define DW_IC_CON_MASTER                       BIT(0)
-#define DW_IC_CON_SPEED_STD                    (1 << 1)
-#define DW_IC_CON_SPEED_FAST                   (2 << 1)
-#define DW_IC_CON_SPEED_HIGH                   (3 << 1)
-#define DW_IC_CON_SPEED_MASK                   GENMASK(2, 1)
-#define DW_IC_CON_10BITADDR_SLAVE              BIT(3)
-#define DW_IC_CON_10BITADDR_MASTER             BIT(4)
-#define DW_IC_CON_RESTART_EN                   BIT(5)
-#define DW_IC_CON_SLAVE_DISABLE                        BIT(6)
-#define DW_IC_CON_STOP_DET_IFADDRESSED         BIT(7)
-#define DW_IC_CON_TX_EMPTY_CTRL                        BIT(8)
-#define DW_IC_CON_RX_FIFO_FULL_HLD_CTRL                BIT(9)
-#define DW_IC_CON_BUS_CLEAR_CTRL               BIT(11)
-
-#define DW_IC_DATA_CMD_DAT                     GENMASK(7, 0)
-#define DW_IC_DATA_CMD_FIRST_DATA_BYTE         BIT(11)
-
 /*
  * Register access parameters
  */
@@ -55,65 +39,9 @@
 #define DW_IC_FIFO_RX_FIELD                    GENMASK(15, 8)
 #define DW_IC_FIFO_MIN_DEPTH                   2
 
-/*
- * Registers offset
- */
-#define DW_IC_CON                              0x00
-#define DW_IC_TAR                              0x04
-#define DW_IC_SAR                              0x08
-#define DW_IC_DATA_CMD                         0x10
-#define DW_IC_SS_SCL_HCNT                      0x14
-#define DW_IC_SS_SCL_LCNT                      0x18
-#define DW_IC_FS_SCL_HCNT                      0x1c
-#define DW_IC_FS_SCL_LCNT                      0x20
-#define DW_IC_HS_SCL_HCNT                      0x24
-#define DW_IC_HS_SCL_LCNT                      0x28
-#define DW_IC_INTR_STAT                                0x2c
-#define DW_IC_INTR_MASK                                0x30
-#define DW_IC_RAW_INTR_STAT                    0x34
-#define DW_IC_RX_TL                            0x38
-#define DW_IC_TX_TL                            0x3c
-#define DW_IC_CLR_INTR                         0x40
-#define DW_IC_CLR_RX_UNDER                     0x44
-#define DW_IC_CLR_RX_OVER                      0x48
-#define DW_IC_CLR_TX_OVER                      0x4c
-#define DW_IC_CLR_RD_REQ                       0x50
-#define DW_IC_CLR_TX_ABRT                      0x54
-#define DW_IC_CLR_RX_DONE                      0x58
-#define DW_IC_CLR_ACTIVITY                     0x5c
-#define DW_IC_CLR_STOP_DET                     0x60
-#define DW_IC_CLR_START_DET                    0x64
-#define DW_IC_CLR_GEN_CALL                     0x68
-#define DW_IC_ENABLE                           0x6c
-#define DW_IC_STATUS                           0x70
-#define DW_IC_TXFLR                            0x74
-#define DW_IC_RXFLR                            0x78
-#define DW_IC_SDA_HOLD                         0x7c
-#define DW_IC_TX_ABRT_SOURCE                   0x80
-#define DW_IC_ENABLE_STATUS                    0x9c
-#define DW_IC_CLR_RESTART_DET                  0xa8
-#define DW_IC_SMBUS_INTR_MASK                  0xcc
-#define DW_IC_COMP_PARAM_1                     0xf4
-#define DW_IC_COMP_VERSION                     0xf8
 #define DW_IC_SDA_HOLD_MIN_VERS                        0x3131312A /* "111*" == 
v1.11* */
-#define DW_IC_COMP_TYPE                                0xfc
 #define DW_IC_COMP_TYPE_VALUE                  0x44570140 /* "DW" + 0x0140 */
 
-#define DW_IC_INTR_RX_UNDER                    BIT(0)
-#define DW_IC_INTR_RX_OVER                     BIT(1)
-#define DW_IC_INTR_RX_FULL                     BIT(2)
-#define DW_IC_INTR_TX_OVER                     BIT(3)
-#define DW_IC_INTR_TX_EMPTY                    BIT(4)
-#define DW_IC_INTR_RD_REQ                      BIT(5)
-#define DW_IC_INTR_TX_ABRT                     BIT(6)
-#define DW_IC_INTR_RX_DONE                     BIT(7)
-#define DW_IC_INTR_ACTIVITY                    BIT(8)
-#define DW_IC_INTR_STOP_DET                    BIT(9)
-#define DW_IC_INTR_START_DET                   BIT(10)
-#define DW_IC_INTR_GEN_CALL                    BIT(11)
-#define DW_IC_INTR_RESTART_DET                 BIT(12)
-#define DW_IC_INTR_MST_ON_HOLD                 BIT(13)
-
 #define DW_IC_INTR_DEFAULT_MASK                        (DW_IC_INTR_RX_FULL | \
                                                 DW_IC_INTR_TX_ABRT | \
                                                 DW_IC_INTR_STOP_DET)
@@ -123,16 +51,6 @@
                                                 DW_IC_INTR_RX_UNDER | \
                                                 DW_IC_INTR_RD_REQ)
 
-#define DW_IC_ENABLE_ENABLE                    BIT(0)
-#define DW_IC_ENABLE_ABORT                     BIT(1)
-
-#define DW_IC_STATUS_ACTIVITY                  BIT(0)
-#define DW_IC_STATUS_TFE                       BIT(2)
-#define DW_IC_STATUS_RFNE                      BIT(3)
-#define DW_IC_STATUS_MASTER_ACTIVITY           BIT(5)
-#define DW_IC_STATUS_SLAVE_ACTIVITY            BIT(6)
-#define DW_IC_STATUS_MASTER_HOLD_TX_FIFO_EMPTY BIT(7)
-
 #define DW_IC_SDA_HOLD_RX_SHIFT                        16
 #define DW_IC_SDA_HOLD_RX_MASK                 GENMASK(23, 16)
 
diff --git a/drivers/i2c/busses/i2c-designware-master.c 
b/drivers/i2c/busses/i2c-designware-master.c
index de929b91d5ead..3b113df0f28e0 100644
--- a/drivers/i2c/busses/i2c-designware-master.c
+++ b/drivers/i2c/busses/i2c-designware-master.c
@@ -12,6 +12,7 @@
 #define DEFAULT_SYMBOL_NAMESPACE       "I2C_DW"
 
 #include <linux/delay.h>
+#include <linux/designware_i2c.h>
 #include <linux/err.h>
 #include <linux/errno.h>
 #include <linux/export.h>
diff --git a/include/linux/designware_i2c.h b/include/linux/designware_i2c.h
new file mode 100644
index 0000000000000..53f37f18a7229
--- /dev/null
+++ b/include/linux/designware_i2c.h
@@ -0,0 +1,107 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Synopsys DesignWare I2C register definitions
+ *
+ * Copyright (C) 2026, Intel Corporation
+ */
+
+#ifndef __LINUX_DESIGNWARE_I2C_H
+#define __LINUX_DESIGNWARE_I2C_H
+
+#include <linux/bits.h>
+
+/*
+ * Registers offset
+ */
+#define DW_IC_CON                              0x00
+#define DW_IC_TAR                              0x04
+#define DW_IC_SAR                              0x08
+#define DW_IC_DATA_CMD                         0x10
+#define DW_IC_SS_SCL_HCNT                      0x14
+#define DW_IC_SS_SCL_LCNT                      0x18
+#define DW_IC_FS_SCL_HCNT                      0x1c
+#define DW_IC_FS_SCL_LCNT                      0x20
+#define DW_IC_HS_SCL_HCNT                      0x24
+#define DW_IC_HS_SCL_LCNT                      0x28
+#define DW_IC_INTR_STAT                                0x2c
+#define DW_IC_INTR_MASK                                0x30
+#define DW_IC_RAW_INTR_STAT                    0x34
+#define DW_IC_RX_TL                            0x38
+#define DW_IC_TX_TL                            0x3c
+#define DW_IC_CLR_INTR                         0x40
+#define DW_IC_CLR_RX_UNDER                     0x44
+#define DW_IC_CLR_RX_OVER                      0x48
+#define DW_IC_CLR_TX_OVER                      0x4c
+#define DW_IC_CLR_RD_REQ                       0x50
+#define DW_IC_CLR_TX_ABRT                      0x54
+#define DW_IC_CLR_RX_DONE                      0x58
+#define DW_IC_CLR_ACTIVITY                     0x5c
+#define DW_IC_CLR_STOP_DET                     0x60
+#define DW_IC_CLR_START_DET                    0x64
+#define DW_IC_CLR_GEN_CALL                     0x68
+#define DW_IC_ENABLE                           0x6c
+#define DW_IC_STATUS                           0x70
+#define DW_IC_TXFLR                            0x74
+#define DW_IC_RXFLR                            0x78
+#define DW_IC_SDA_HOLD                         0x7c
+#define DW_IC_TX_ABRT_SOURCE                   0x80
+#define DW_IC_ENABLE_STATUS                    0x9c
+#define DW_IC_CLR_RESTART_DET                  0xa8
+#define DW_IC_SMBUS_INTR_STAT                  0xc8
+#define DW_IC_SMBUS_INTR_MASK                  0xcc
+#define DW_IC_CLR_SMBUS_INTR                   0xd4
+#define DW_IC_COMP_PARAM_1                     0xf4
+#define DW_IC_COMP_VERSION                     0xf8
+#define DW_IC_COMP_TYPE                                0xfc
+
+/* DW_IC_CON bits */
+#define DW_IC_CON_MASTER                       BIT(0)
+#define DW_IC_CON_SPEED_STD                    (1 << 1)
+#define DW_IC_CON_SPEED_FAST                   (2 << 1)
+#define DW_IC_CON_SPEED_HIGH                   (3 << 1)
+#define DW_IC_CON_SPEED_MASK                   GENMASK(2, 1)
+#define DW_IC_CON_10BITADDR_SLAVE              BIT(3)
+#define DW_IC_CON_10BITADDR_MASTER             BIT(4)
+#define DW_IC_CON_RESTART_EN                   BIT(5)
+#define DW_IC_CON_SLAVE_DISABLE                        BIT(6)
+#define DW_IC_CON_STOP_DET_IFADDRESSED         BIT(7)
+#define DW_IC_CON_TX_EMPTY_CTRL                        BIT(8)
+#define DW_IC_CON_RX_FIFO_FULL_HLD_CTRL                BIT(9)
+#define DW_IC_CON_BUS_CLEAR_CTRL               BIT(11)
+
+/* DW_IC_DATA_CMD bits */
+#define DW_IC_DATA_CMD_DAT                     GENMASK(7, 0)
+#define DW_IC_DATA_CMD_FIRST_DATA_BYTE         BIT(11)
+
+/* DW_IC_INTR_* bits */
+#define DW_IC_INTR_RX_UNDER                    BIT(0)
+#define DW_IC_INTR_RX_OVER                     BIT(1)
+#define DW_IC_INTR_RX_FULL                     BIT(2)
+#define DW_IC_INTR_TX_OVER                     BIT(3)
+#define DW_IC_INTR_TX_EMPTY                    BIT(4)
+#define DW_IC_INTR_RD_REQ                      BIT(5)
+#define DW_IC_INTR_TX_ABRT                     BIT(6)
+#define DW_IC_INTR_RX_DONE                     BIT(7)
+#define DW_IC_INTR_ACTIVITY                    BIT(8)
+#define DW_IC_INTR_STOP_DET                    BIT(9)
+#define DW_IC_INTR_START_DET                   BIT(10)
+#define DW_IC_INTR_GEN_CALL                    BIT(11)
+#define DW_IC_INTR_RESTART_DET                 BIT(12)
+#define DW_IC_INTR_MST_ON_HOLD                 BIT(13)
+
+/* DW_IC_ENABLE bits */
+#define DW_IC_ENABLE_ENABLE                    BIT(0)
+#define DW_IC_ENABLE_ABORT                     BIT(1)
+
+/* DW_IC_STATUS bits */
+#define DW_IC_STATUS_ACTIVITY                  BIT(0)
+#define DW_IC_STATUS_TFE                       BIT(2)
+#define DW_IC_STATUS_RFNE                      BIT(3)
+#define DW_IC_STATUS_MASTER_ACTIVITY           BIT(5)
+#define DW_IC_STATUS_SLAVE_ACTIVITY            BIT(6)
+#define DW_IC_STATUS_MASTER_HOLD_TX_FIFO_EMPTY BIT(7)
+
+/* DW_IC_SMBUS_INTR_* bits */
+#define DW_IC_SMBUS_INTR_ALERT                 BIT(10)
+
+#endif /* __LINUX_DESIGNWARE_I2C_H */
-- 
2.50.1

Reply via email to