* quicki2c_dev_init - Initialize QuickI2C device
  * @pdev: Pointer to the THC PCI device
  * @mem_addr: The Pointer of MMIO memory address
+ * @ddata: Point to quicki2c_ddata structure
  *
  * Alloc quicki2c_device structure and initialized THC device,
  * then configure THC to HIDI2C mode.
  * Return: Pointer to the quicki2c_device structure if success
  * or NULL on failure.
  */
-static struct quicki2c_device *quicki2c_dev_init(struct pci_dev *pdev, void __iomem *mem_addr)
+static struct quicki2c_device *quicki2c_dev_init(struct pci_dev *pdev, void __iomem *mem_addr,
+                                                const struct quicki2c_ddata *ddata)
 {
        struct device *dev = &pdev->dev;
        struct quicki2c_device *qcdev;
        qcdev->dev = dev;
        qcdev->mem_addr = mem_addr;
        qcdev->state = QUICKI2C_DISABLED;
+       qcdev->ddata = ddata;
 
        init_waitqueue_head(&qcdev->reset_ack_wq);
 
  *
  * Return 0 if success or error code on failure.
  */
-static int quicki2c_probe(struct pci_dev *pdev,
-                         const struct pci_device_id *id)
+static int quicki2c_probe(struct pci_dev *pdev, const struct pci_device_id *id)
 {
+       const struct quicki2c_ddata *ddata = (const struct quicki2c_ddata *)id->driver_data;
        struct quicki2c_device *qcdev;
        void __iomem *mem_addr;
        int ret;
 
        pdev->irq = pci_irq_vector(pdev, 0);
 
-       qcdev = quicki2c_dev_init(pdev, mem_addr);
+       qcdev = quicki2c_dev_init(pdev, mem_addr, ddata);
        if (IS_ERR(qcdev)) {
                dev_err_once(&pdev->dev, "QuickI2C device init failed\n");
                ret = PTR_ERR(qcdev);
 };
 
 static const struct pci_device_id quicki2c_pci_tbl[] = {
-       {PCI_VDEVICE(INTEL, THC_LNL_DEVICE_ID_I2C_PORT1), },
-       {PCI_VDEVICE(INTEL, THC_LNL_DEVICE_ID_I2C_PORT2), },
-       {PCI_VDEVICE(INTEL, THC_PTL_H_DEVICE_ID_I2C_PORT1), },
-       {PCI_VDEVICE(INTEL, THC_PTL_H_DEVICE_ID_I2C_PORT2), },
-       {PCI_VDEVICE(INTEL, THC_PTL_U_DEVICE_ID_I2C_PORT1), },
-       {PCI_VDEVICE(INTEL, THC_PTL_U_DEVICE_ID_I2C_PORT2), },
-       {}
+       { PCI_DEVICE_DATA(INTEL, THC_LNL_DEVICE_ID_I2C_PORT1, NULL) },
+       { PCI_DEVICE_DATA(INTEL, THC_LNL_DEVICE_ID_I2C_PORT2, NULL) },
+       { PCI_DEVICE_DATA(INTEL, THC_PTL_H_DEVICE_ID_I2C_PORT1, NULL) },
+       { PCI_DEVICE_DATA(INTEL, THC_PTL_H_DEVICE_ID_I2C_PORT2, NULL) },
+       { PCI_DEVICE_DATA(INTEL, THC_PTL_U_DEVICE_ID_I2C_PORT1, NULL) },
+       { PCI_DEVICE_DATA(INTEL, THC_PTL_U_DEVICE_ID_I2C_PORT2, NULL) },
+       { }
 };
 MODULE_DEVICE_TABLE(pci, quicki2c_pci_tbl);
 
 
 #include <linux/hid-over-i2c.h>
 #include <linux/workqueue.h>
 
-#define THC_LNL_DEVICE_ID_I2C_PORT1    0xA848
-#define THC_LNL_DEVICE_ID_I2C_PORT2    0xA84A
-#define THC_PTL_H_DEVICE_ID_I2C_PORT1  0xE348
-#define THC_PTL_H_DEVICE_ID_I2C_PORT2  0xE34A
-#define THC_PTL_U_DEVICE_ID_I2C_PORT1  0xE448
-#define THC_PTL_U_DEVICE_ID_I2C_PORT2  0xE44A
+#define PCI_DEVICE_ID_INTEL_THC_LNL_DEVICE_ID_I2C_PORT1                0xA848
+#define PCI_DEVICE_ID_INTEL_THC_LNL_DEVICE_ID_I2C_PORT2                0xA84A
+#define PCI_DEVICE_ID_INTEL_THC_PTL_H_DEVICE_ID_I2C_PORT1      0xE348
+#define PCI_DEVICE_ID_INTEL_THC_PTL_H_DEVICE_ID_I2C_PORT2      0xE34A
+#define PCI_DEVICE_ID_INTEL_THC_PTL_U_DEVICE_ID_I2C_PORT1      0xE448
+#define PCI_DEVICE_ID_INTEL_THC_PTL_U_DEVICE_ID_I2C_PORT2      0xE44A
 
 /* Packet size value, the unit is 16 bytes */
 #define MAX_PACKET_SIZE_VALUE_LNL                      256
        u64 HMSL;
 };
 
+/**
+ * struct quicki2c_ddata - Driver specific data for quicki2c device
+ * @max_detect_size: Identify max packet size detect for rx
+ * @interrupt_delay: Identify interrupt detect delay for rx
+ */
+struct quicki2c_ddata {
+       u32 max_detect_size;
+       u32 interrupt_delay;
+};
+
 struct device;
 struct pci_dev;
 struct thc_device;
  * @thc_hw: Point to THC device
  * @hid_dev: Point to HID device
  * @acpi_dev: Point to ACPI device
+ * @ddata: Point to QuickI2C platform specific driver data
  * @state: THC I2C device state
  * @mem_addr: MMIO memory address
  * @dev_desc: Device descriptor for HIDI2C protocol
        struct thc_device *thc_hw;
        struct hid_device *hid_dev;
        struct acpi_device *acpi_dev;
+       const struct quicki2c_ddata *ddata;
        enum quicki2c_dev_state state;
 
        void __iomem *mem_addr;