diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2017-05-19 20:33:08 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2017-05-19 20:33:08 -0400 |
commit | 0bdc6fd2329e51b9659d5192f4281493c15e95b3 (patch) | |
tree | fa6597999eb642220cdaca495d04da2ab6d08181 | |
parent | d4c6cd157a77645b9f8bff348b57aafa551f2d79 (diff) | |
parent | 9d6408433019bfae15e2d0d5f4498c4ff70b86c0 (diff) |
Merge branch 'i2c/for-current' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux
Pull i2c fix from Wolfram Sang:
"A regression fix for I2C that would be great to have in rc2"
* 'i2c/for-current' of git://git.kernel.org/pub/scm/linux/kernel/git/wsa/linux:
i2c: designware: don't infer timings described by ACPI from clock rate
-rw-r--r-- | drivers/i2c/busses/i2c-designware-platdrv.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/drivers/i2c/busses/i2c-designware-platdrv.c b/drivers/i2c/busses/i2c-designware-platdrv.c index f2acd4b6bf01..6283b99d2b17 100644 --- a/drivers/i2c/busses/i2c-designware-platdrv.c +++ b/drivers/i2c/busses/i2c-designware-platdrv.c | |||
@@ -96,6 +96,7 @@ static int dw_i2c_acpi_configure(struct platform_device *pdev) | |||
96 | struct dw_i2c_dev *dev = platform_get_drvdata(pdev); | 96 | struct dw_i2c_dev *dev = platform_get_drvdata(pdev); |
97 | acpi_handle handle = ACPI_HANDLE(&pdev->dev); | 97 | acpi_handle handle = ACPI_HANDLE(&pdev->dev); |
98 | const struct acpi_device_id *id; | 98 | const struct acpi_device_id *id; |
99 | u32 ss_ht, fp_ht, hs_ht, fs_ht; | ||
99 | struct acpi_device *adev; | 100 | struct acpi_device *adev; |
100 | const char *uid; | 101 | const char *uid; |
101 | 102 | ||
@@ -107,23 +108,24 @@ static int dw_i2c_acpi_configure(struct platform_device *pdev) | |||
107 | * Try to get SDA hold time and *CNT values from an ACPI method for | 108 | * Try to get SDA hold time and *CNT values from an ACPI method for |
108 | * selected speed modes. | 109 | * selected speed modes. |
109 | */ | 110 | */ |
111 | dw_i2c_acpi_params(pdev, "SSCN", &dev->ss_hcnt, &dev->ss_lcnt, &ss_ht); | ||
112 | dw_i2c_acpi_params(pdev, "FPCN", &dev->fp_hcnt, &dev->fp_lcnt, &fp_ht); | ||
113 | dw_i2c_acpi_params(pdev, "HSCN", &dev->hs_hcnt, &dev->hs_lcnt, &hs_ht); | ||
114 | dw_i2c_acpi_params(pdev, "FMCN", &dev->fs_hcnt, &dev->fs_lcnt, &fs_ht); | ||
115 | |||
110 | switch (dev->clk_freq) { | 116 | switch (dev->clk_freq) { |
111 | case 100000: | 117 | case 100000: |
112 | dw_i2c_acpi_params(pdev, "SSCN", &dev->ss_hcnt, &dev->ss_lcnt, | 118 | dev->sda_hold_time = ss_ht; |
113 | &dev->sda_hold_time); | ||
114 | break; | 119 | break; |
115 | case 1000000: | 120 | case 1000000: |
116 | dw_i2c_acpi_params(pdev, "FPCN", &dev->fp_hcnt, &dev->fp_lcnt, | 121 | dev->sda_hold_time = fp_ht; |
117 | &dev->sda_hold_time); | ||
118 | break; | 122 | break; |
119 | case 3400000: | 123 | case 3400000: |
120 | dw_i2c_acpi_params(pdev, "HSCN", &dev->hs_hcnt, &dev->hs_lcnt, | 124 | dev->sda_hold_time = hs_ht; |
121 | &dev->sda_hold_time); | ||
122 | break; | 125 | break; |
123 | case 400000: | 126 | case 400000: |
124 | default: | 127 | default: |
125 | dw_i2c_acpi_params(pdev, "FMCN", &dev->fs_hcnt, &dev->fs_lcnt, | 128 | dev->sda_hold_time = fs_ht; |
126 | &dev->sda_hold_time); | ||
127 | break; | 129 | break; |
128 | } | 130 | } |
129 | 131 | ||