summary refs log tree commit diff
diff options
context:
space:
mode:
authorHeikki Krogerus <heikki.krogerus@linux.intel.com>2013-04-10 16:58:29 +0300
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-04-11 13:20:19 -0700
commitaea02e87f6076f2a29d537829503e1344e92a3b8 (patch)
treee9f1181f9faa201c6ddca0bad1a89f4a0f9d00c1
parentffc3ae6dd925b6a89b2f4f993a732e3b866e6aa0 (diff)
downloadlinux-aea02e87f6076f2a29d537829503e1344e92a3b8.tar.gz
serial: 8250_dw: Support clk framework also with ACPI
The Lynxpoint LPSS peripheral clocks are now handled in clk
framework so the drivers do not need to take care of them
manually. In dw8250_probe_acpi(), the uartclk is now taken
from the driver_data only if it was not already set.

Signed-off-by: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/tty/serial/8250/8250_dw.c18
1 files changed, 5 insertions, 13 deletions
diff --git a/drivers/tty/serial/8250/8250_dw.c b/drivers/tty/serial/8250/8250_dw.c
index d6aea85a9b14..de7a1869c82c 100644
--- a/drivers/tty/serial/8250/8250_dw.c
+++ b/drivers/tty/serial/8250/8250_dw.c
@@ -36,9 +36,6 @@
 #define DW_UART_CPR	0xf4 /* Component Parameter Register */
 #define DW_UART_UCV	0xf8 /* UART Component Version */
 
-/* Intel Low Power Subsystem specific */
-#define LPSS_PRV_CLOCK_PARAMS 0x800
-
 /* Component Parameter Register bits */
 #define DW_UART_CPR_ABP_DATA_WIDTH	(3 << 0)
 #define DW_UART_CPR_AFCE_MODE		(1 << 4)
@@ -226,7 +223,6 @@ static int dw8250_probe_acpi(struct uart_port *p)
 {
 	const struct acpi_device_id *id;
 	acpi_status status;
-	u32 reg;
 
 	id = acpi_match_device(p->dev->driver->acpi_match_table, p->dev);
 	if (!id)
@@ -236,7 +232,9 @@ static int dw8250_probe_acpi(struct uart_port *p)
 	p->serial_in = dw8250_serial_in32;
 	p->serial_out = dw8250_serial_out32;
 	p->regshift = 2;
-	p->uartclk = (unsigned int)id->driver_data;
+
+	if (!p->uartclk)
+		p->uartclk = (unsigned int)id->driver_data;
 
 	status = acpi_walk_resources(ACPI_HANDLE(p->dev), METHOD_NAME__CRS,
 				     dw8250_acpi_walk_resource, p);
@@ -246,12 +244,6 @@ static int dw8250_probe_acpi(struct uart_port *p)
 		return -ENODEV;
 	}
 
-	/* Fix Haswell issue where the clocks do not get enabled */
-	if (!strcmp(id->id, "INT33C4") || !strcmp(id->id, "INT33C5")) {
-		reg = readl(p->membase + LPSS_PRV_CLOCK_PARAMS);
-		writel(reg | 1, p->membase + LPSS_PRV_CLOCK_PARAMS);
-	}
-
 	return 0;
 }
 #else
@@ -425,8 +417,8 @@ static const struct of_device_id dw8250_of_match[] = {
 MODULE_DEVICE_TABLE(of, dw8250_of_match);
 
 static const struct acpi_device_id dw8250_acpi_match[] = {
-	{ "INT33C4", 100000000 },
-	{ "INT33C5", 100000000 },
+	{ "INT33C4", 0 },
+	{ "INT33C5", 0 },
 	{ },
 };
 MODULE_DEVICE_TABLE(acpi, dw8250_acpi_match);