i2c: designware-pci: Add Haswell PCI IDs
[cascardo/linux.git] / drivers / i2c / busses / i2c-designware-pcidrv.c
index 85056c2..3356f7a 100644 (file)
@@ -56,6 +56,7 @@ enum dw_pci_ctl_id_t {
        medfield_5,
 
        baytrail,
+       haswell,
 };
 
 struct dw_scl_sda_cfg {
@@ -95,6 +96,15 @@ static struct dw_scl_sda_cfg byt_config = {
        .sda_hold = 0x6,
 };
 
+/* Haswell HCNT/LCNT/SDA hold time */
+static struct dw_scl_sda_cfg hsw_config = {
+       .ss_hcnt = 0x01b0,
+       .fs_hcnt = 0x48,
+       .ss_lcnt = 0x01fb,
+       .fs_lcnt = 0xa0,
+       .sda_hold = 0x9,
+};
+
 static struct  dw_pci_controller  dw_pci_controllers[] = {
        [moorestown_0] = {
                .bus_num     = 0,
@@ -168,6 +178,15 @@ static struct  dw_pci_controller  dw_pci_controllers[] = {
                .functionality = I2C_FUNC_10BIT_ADDR,
                .scl_sda_cfg = &byt_config,
        },
+       [haswell] = {
+               .bus_num = -1,
+               .bus_cfg = INTEL_MID_STD_CFG | DW_IC_CON_SPEED_FAST,
+               .tx_fifo_depth = 32,
+               .rx_fifo_depth = 32,
+               .clk_khz = 100000,
+               .functionality = I2C_FUNC_10BIT_ADDR,
+               .scl_sda_cfg = &hsw_config,
+       },
 };
 static struct i2c_algorithm i2c_dw_algo = {
        .master_xfer    = i2c_dw_xfer,
@@ -328,6 +347,9 @@ static const struct pci_device_id i2_designware_pci_ids[] = {
        { PCI_VDEVICE(INTEL, 0x0F45), baytrail },
        { PCI_VDEVICE(INTEL, 0x0F46), baytrail },
        { PCI_VDEVICE(INTEL, 0x0F47), baytrail },
+       /* Haswell */
+       { PCI_VDEVICE(INTEL, 0x9c61), haswell },
+       { PCI_VDEVICE(INTEL, 0x9c62), haswell },
        { 0,}
 };
 MODULE_DEVICE_TABLE(pci, i2_designware_pci_ids);