|
@@ -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);
|