Pull i2c fixes from Wolfram Sang: "Some more driver fixes for i2c" * 'i2c/for-current' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux: i2c: npcm7xx: Clear LAST bit after a failed transaction. i2c: cpm: Fix i2c_ram structure i2c: i801: Exclude device from suspend direct complete optimization
Unified · Split
| @@ -65,6 +65,9 @@ struct i2c_ram { · 64 unmodified lines | ||
| 65 | 65 | char res1[4]; /* Reserved */ |
| 66 | 66 | ushort rpbase; /* Relocation pointer */ |
| 67 | 67 | char res2[2]; /* Reserved */ |
| 68 | + /* The following elements are only for CPM2 */ | |
| 69 | + char res3[4]; /* Reserved */ | |
| 70 | + uint sdmatmp; /* Internal */ | |
| 68 | 71 | }; |
| 69 | 72 | |
| 70 | 73 | #define I2COM_START 0x80 |
| @@ -1917,6 +1917,7 @@ static int i801_probe(struct pci_dev *dev, const struct pci_device_id *id) · 1916 unmodified lines | ||
| 1917 | 1917 | |
| 1918 | 1918 | pci_set_drvdata(dev, priv); |
| 1919 | 1919 | |
| 1920 | + dev_pm_set_driver_flags(&dev->dev, DPM_FLAG_NO_DIRECT_COMPLETE); | |
| 1920 | 1921 | pm_runtime_set_autosuspend_delay(&dev->dev, 1000); |
| 1921 | 1922 | pm_runtime_use_autosuspend(&dev->dev); |
| 1922 | 1923 | pm_runtime_put_autosuspend(&dev->dev); |
| @@ -2163,6 +2163,15 @@ static int npcm_i2c_master_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, · 2162 unmodified lines | ||
| 2163 | 2163 | if (bus->cmd_err == -EAGAIN) |
| 2164 | 2164 | ret = i2c_recover_bus(adap); |
| 2165 | 2165 | |
| 2166 | + /* | |
| 2167 | + * After any type of error, check if LAST bit is still set, | |
| 2168 | + * due to a HW issue. | |
| 2169 | + * It cannot be cleared without resetting the module. | |
| 2170 | + */ | |
| 2171 | + if (bus->cmd_err && | |
| 2172 | + (NPCM_I2CRXF_CTL_LAST_PEC & ioread8(bus->reg + NPCM_I2CRXF_CTL))) | |
| 2173 | + npcm_i2c_reset(bus); | |
| 2174 | + | |
| 2166 | 2175 | #if IS_ENABLED(CONFIG_I2C_SLAVE) |
| 2167 | 2176 | /* reenable slave if it was enabled */ |
| 2168 | 2177 | if (bus->slave) |