]> git.hungrycats.org Git - linux/commitdiff
i2c: designware: Global register definitions
authorHeikki Krogerus <heikki.krogerus@linux.intel.com>
Tue, 11 Aug 2026 12:10:06 +0000 (14:10 +0200)
committerRodrigo Vivi <rodrigo.vivi@intel.com>
Thu, 27 Aug 2026 16:00:16 +0000 (12:00 -0400)
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 <andriy.shevchenko@linux.intel.com>
Suggested-by: Raag Jadav <raag.jadav@intel.com>
Reviewed-by: Raag Jadav <raag.jadav@intel.com>
Reviewed-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Reviewed-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Acked-by: Mika Westerberg <mika.westerberg@linux.intel.com>
Link: https://patch.msgid.link/20260811121008.1493015-2-heikki.krogerus@linux.intel.com
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
(cherry picked from commit 2ab2fb31411a494e4579dfacda986a2672f80e65)
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
MAINTAINERS
drivers/i2c/busses/i2c-designware-common.c
drivers/i2c/busses/i2c-designware-core.h
drivers/i2c/busses/i2c-designware-master.c
drivers/i2c/busses/i2c-designware-slave.c
include/linux/designware_i2c.h [new file with mode: 0644]

index 928b3ba23a76b7a13e21e0eea1338fe3a97b1ab7..1d0685b2cfdb084e273cbb1f3038ae2eac961aba 100644 (file)
@@ -26253,6 +26253,7 @@ R:      Andy Shevchenko <andriy.shevchenko@linux.intel.com>
 L:     linux-i2c@vger.kernel.org
 S:     Supported
 F:     drivers/i2c/busses/i2c-designware-*
+F:     include/linux/designware_i2c.h
 
 SYNOPSYS DESIGNWARE I2C DRIVER - AMDISP
 M:     Nirujogi Pratap <pratap.nirujogi@amd.com>
index e4dfa2ec58bb76e0f02e6ee9b840a37b0cc74dac..a1eca6cd4b75e9a76f2fc10afba8877d2b45417d 100644 (file)
@@ -33,6 +33,8 @@
 #include <linux/types.h>
 #include <linux/units.h>
 
+#include <linux/designware_i2c.h>
+
 #include "i2c-designware-core.h"
 
 #define DW_IC_DEFAULT_BUS_CAPACITANCE_pF       100
index c71aa2dd368d5f79e10445f949334d1ca9d7e95f..2c929a6e8da2a35b3b2d8ad886e326e2df285927 100644 (file)
@@ -18,6 +18,8 @@
 #include <linux/regmap.h>
 #include <linux/types.h>
 
+#include <linux/designware_i2c.h>
+
 #define DW_IC_DEFAULT_FUNCTIONALITY            (I2C_FUNC_I2C | \
                                                 I2C_FUNC_SMBUS_BYTE | \
                                                 I2C_FUNC_SMBUS_BYTE_DATA | \
                                                 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
  */
 #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)
                                                 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)
 
index 7a301c8b604ef448f24a57c278e8e8fb44d5f438..a1bcc3797e4ffef0edb9d3e978eab20a3c09d6aa 100644 (file)
@@ -25,6 +25,8 @@
 #include <linux/regmap.h>
 #include <linux/reset.h>
 
+#include <linux/designware_i2c.h>
+
 #include "i2c-designware-core.h"
 
 #define AMD_TIMEOUT_MIN_US     25
index ad0d5fbfa6d5e77c8daa255ae19bbb2623469510..0abcc7757b2312d824d4c2d86b3c364c0c9082bb 100644 (file)
@@ -19,6 +19,8 @@
 #include <linux/pm_runtime.h>
 #include <linux/regmap.h>
 
+#include <linux/designware_i2c.h>
+
 #include "i2c-designware-core.h"
 
 int i2c_dw_reg_slave(struct i2c_client *slave)
diff --git a/include/linux/designware_i2c.h b/include/linux/designware_i2c.h
new file mode 100644 (file)
index 0000000..53f37f1
--- /dev/null
@@ -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 */