diff options
Diffstat (limited to 'drivers/acpi/acpi_lpss.c')
-rw-r--r-- | drivers/acpi/acpi_lpss.c | 21 |
1 files changed, 18 insertions, 3 deletions
diff --git a/drivers/acpi/acpi_lpss.c b/drivers/acpi/acpi_lpss.c index 02e835f3cf8a..657964e8ab7e 100644 --- a/drivers/acpi/acpi_lpss.c +++ b/drivers/acpi/acpi_lpss.c | |||
@@ -105,7 +105,7 @@ static void lpss_uart_setup(struct lpss_private_data *pdata) | |||
105 | } | 105 | } |
106 | } | 106 | } |
107 | 107 | ||
108 | static void byt_i2c_setup(struct lpss_private_data *pdata) | 108 | static void lpss_deassert_reset(struct lpss_private_data *pdata) |
109 | { | 109 | { |
110 | unsigned int offset; | 110 | unsigned int offset; |
111 | u32 val; | 111 | u32 val; |
@@ -114,9 +114,18 @@ static void byt_i2c_setup(struct lpss_private_data *pdata) | |||
114 | val = readl(pdata->mmio_base + offset); | 114 | val = readl(pdata->mmio_base + offset); |
115 | val |= LPSS_RESETS_RESET_APB | LPSS_RESETS_RESET_FUNC; | 115 | val |= LPSS_RESETS_RESET_APB | LPSS_RESETS_RESET_FUNC; |
116 | writel(val, pdata->mmio_base + offset); | 116 | writel(val, pdata->mmio_base + offset); |
117 | } | ||
118 | |||
119 | #define LPSS_I2C_ENABLE 0x6c | ||
120 | |||
121 | static void byt_i2c_setup(struct lpss_private_data *pdata) | ||
122 | { | ||
123 | lpss_deassert_reset(pdata); | ||
117 | 124 | ||
118 | if (readl(pdata->mmio_base + pdata->dev_desc->prv_offset)) | 125 | if (readl(pdata->mmio_base + pdata->dev_desc->prv_offset)) |
119 | pdata->fixed_clk_rate = 133000000; | 126 | pdata->fixed_clk_rate = 133000000; |
127 | |||
128 | writel(0, pdata->mmio_base + LPSS_I2C_ENABLE); | ||
120 | } | 129 | } |
121 | 130 | ||
122 | static struct lpss_device_desc lpt_dev_desc = { | 131 | static struct lpss_device_desc lpt_dev_desc = { |
@@ -125,7 +134,7 @@ static struct lpss_device_desc lpt_dev_desc = { | |||
125 | }; | 134 | }; |
126 | 135 | ||
127 | static struct lpss_device_desc lpt_i2c_dev_desc = { | 136 | static struct lpss_device_desc lpt_i2c_dev_desc = { |
128 | .flags = LPSS_CLK | LPSS_LTR, | 137 | .flags = LPSS_CLK | LPSS_CLK_GATE | LPSS_LTR, |
129 | .prv_offset = 0x800, | 138 | .prv_offset = 0x800, |
130 | }; | 139 | }; |
131 | 140 | ||
@@ -166,6 +175,12 @@ static struct lpss_device_desc byt_i2c_dev_desc = { | |||
166 | .setup = byt_i2c_setup, | 175 | .setup = byt_i2c_setup, |
167 | }; | 176 | }; |
168 | 177 | ||
178 | static struct lpss_device_desc bsw_spi_dev_desc = { | ||
179 | .flags = LPSS_CLK | LPSS_CLK_GATE | LPSS_CLK_DIVIDER | LPSS_SAVE_CTX, | ||
180 | .prv_offset = 0x400, | ||
181 | .setup = lpss_deassert_reset, | ||
182 | }; | ||
183 | |||
169 | #else | 184 | #else |
170 | 185 | ||
171 | #define LPSS_ADDR(desc) (0UL) | 186 | #define LPSS_ADDR(desc) (0UL) |
@@ -198,7 +213,7 @@ static const struct acpi_device_id acpi_lpss_device_ids[] = { | |||
198 | /* Braswell LPSS devices */ | 213 | /* Braswell LPSS devices */ |
199 | { "80862288", LPSS_ADDR(byt_pwm_dev_desc) }, | 214 | { "80862288", LPSS_ADDR(byt_pwm_dev_desc) }, |
200 | { "8086228A", LPSS_ADDR(byt_uart_dev_desc) }, | 215 | { "8086228A", LPSS_ADDR(byt_uart_dev_desc) }, |
201 | { "8086228E", LPSS_ADDR(byt_spi_dev_desc) }, | 216 | { "8086228E", LPSS_ADDR(bsw_spi_dev_desc) }, |
202 | { "808622C1", LPSS_ADDR(byt_i2c_dev_desc) }, | 217 | { "808622C1", LPSS_ADDR(byt_i2c_dev_desc) }, |
203 | 218 | ||
204 | { "INT3430", LPSS_ADDR(lpt_dev_desc) }, | 219 | { "INT3430", LPSS_ADDR(lpt_dev_desc) }, |