aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/acpi/acpi_lpss.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/acpi/acpi_lpss.c b/drivers/acpi/acpi_lpss.c
index 63407d264885..9cb65b0e7597 100644
--- a/drivers/acpi/acpi_lpss.c
+++ b/drivers/acpi/acpi_lpss.c
@@ -34,6 +34,9 @@ ACPI_MODULE_NAME("acpi_lpss");
34 34
35/* Offsets relative to LPSS_PRIVATE_OFFSET */ 35/* Offsets relative to LPSS_PRIVATE_OFFSET */
36#define LPSS_CLK_DIVIDER_DEF_MASK (BIT(1) | BIT(16)) 36#define LPSS_CLK_DIVIDER_DEF_MASK (BIT(1) | BIT(16))
37#define LPSS_RESETS 0x04
38#define LPSS_RESETS_RESET_FUNC BIT(0)
39#define LPSS_RESETS_RESET_APB BIT(1)
37#define LPSS_GENERAL 0x08 40#define LPSS_GENERAL 0x08
38#define LPSS_GENERAL_LTR_MODE_SW BIT(2) 41#define LPSS_GENERAL_LTR_MODE_SW BIT(2)
39#define LPSS_GENERAL_UART_RTS_OVRD BIT(3) 42#define LPSS_GENERAL_UART_RTS_OVRD BIT(3)
@@ -99,6 +102,17 @@ static void lpss_uart_setup(struct lpss_private_data *pdata)
99 writel(reg | LPSS_GENERAL_UART_RTS_OVRD, pdata->mmio_base + offset); 102 writel(reg | LPSS_GENERAL_UART_RTS_OVRD, pdata->mmio_base + offset);
100} 103}
101 104
105static void lpss_i2c_setup(struct lpss_private_data *pdata)
106{
107 unsigned int offset;
108 u32 val;
109
110 offset = pdata->dev_desc->prv_offset + LPSS_RESETS;
111 val = readl(pdata->mmio_base + offset);
112 val |= LPSS_RESETS_RESET_APB | LPSS_RESETS_RESET_FUNC;
113 writel(val, pdata->mmio_base + offset);
114}
115
102static struct lpss_device_desc lpt_dev_desc = { 116static struct lpss_device_desc lpt_dev_desc = {
103 .clk_required = true, 117 .clk_required = true,
104 .prv_offset = 0x800, 118 .prv_offset = 0x800,
@@ -171,6 +185,7 @@ static struct lpss_device_desc byt_i2c_dev_desc = {
171 .prv_offset = 0x800, 185 .prv_offset = 0x800,
172 .save_ctx = true, 186 .save_ctx = true,
173 .shared_clock = &i2c_clock, 187 .shared_clock = &i2c_clock,
188 .setup = lpss_i2c_setup,
174}; 189};
175 190
176#else 191#else