diff options
author | Denis Turischev <denis@compulab.co.il> | 2011-03-10 08:14:00 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2011-03-14 19:24:23 -0400 |
commit | 6ae705b23be8da52d3163be9d81e9b767876aaf9 (patch) | |
tree | 02d1343739ebbbccc0b0b75ceca9ec749c686917 /drivers/misc | |
parent | 1a738dcf6dac74a0ce10853a068d822f66f73268 (diff) |
pch_uart: reference clock on CM-iTC
Default clock source for UARTs on Topcliff is external UART_CLK.
On CM-iTC USB_48MHz is used instead. After VCO2PLL and DIV
manipulations UARTs will receive 192 MHz.
Clock manipulations on Topcliff are controlled in pch_phub.c
v2: redone against the linux-next tree
v3: redone against linux/kernel/git/next/linux-next.git snapshot
Signed-off-by: Denis Turischev <denis@compulab.co.il>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/misc')
-rw-r--r-- | drivers/misc/pch_phub.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/drivers/misc/pch_phub.c b/drivers/misc/pch_phub.c index 98bffc471b17..5dd0b921bfc6 100644 --- a/drivers/misc/pch_phub.c +++ b/drivers/misc/pch_phub.c | |||
@@ -27,6 +27,7 @@ | |||
27 | #include <linux/mutex.h> | 27 | #include <linux/mutex.h> |
28 | #include <linux/if_ether.h> | 28 | #include <linux/if_ether.h> |
29 | #include <linux/ctype.h> | 29 | #include <linux/ctype.h> |
30 | #include <linux/dmi.h> | ||
30 | 31 | ||
31 | #define PHUB_STATUS 0x00 /* Status Register offset */ | 32 | #define PHUB_STATUS 0x00 /* Status Register offset */ |
32 | #define PHUB_CONTROL 0x04 /* Control Register offset */ | 33 | #define PHUB_CONTROL 0x04 /* Control Register offset */ |
@@ -46,6 +47,13 @@ | |||
46 | #define PCH_MINOR_NOS 1 | 47 | #define PCH_MINOR_NOS 1 |
47 | #define CLKCFG_CAN_50MHZ 0x12000000 | 48 | #define CLKCFG_CAN_50MHZ 0x12000000 |
48 | #define CLKCFG_CANCLK_MASK 0xFF000000 | 49 | #define CLKCFG_CANCLK_MASK 0xFF000000 |
50 | #define CLKCFG_UART_MASK 0xFFFFFF | ||
51 | |||
52 | /* CM-iTC */ | ||
53 | #define CLKCFG_UART_48MHZ (1 << 16) | ||
54 | #define CLKCFG_BAUDDIV (2 << 20) | ||
55 | #define CLKCFG_PLL2VCO (8 << 9) | ||
56 | #define CLKCFG_UARTCLKSEL (1 << 18) | ||
49 | 57 | ||
50 | /* Macros for ML7213 */ | 58 | /* Macros for ML7213 */ |
51 | #define PCI_VENDOR_ID_ROHM 0x10db | 59 | #define PCI_VENDOR_ID_ROHM 0x10db |
@@ -618,6 +626,14 @@ static int __devinit pch_phub_probe(struct pci_dev *pdev, | |||
618 | CLKCFG_CAN_50MHZ, | 626 | CLKCFG_CAN_50MHZ, |
619 | CLKCFG_CANCLK_MASK); | 627 | CLKCFG_CANCLK_MASK); |
620 | 628 | ||
629 | /* quirk for CM-iTC board */ | ||
630 | if (strstr(dmi_get_system_info(DMI_BOARD_NAME), "CM-iTC")) | ||
631 | pch_phub_read_modify_write_reg(chip, | ||
632 | (unsigned int)CLKCFG_REG_OFFSET, | ||
633 | CLKCFG_UART_48MHZ | CLKCFG_BAUDDIV | | ||
634 | CLKCFG_PLL2VCO | CLKCFG_UARTCLKSEL, | ||
635 | CLKCFG_UART_MASK); | ||
636 | |||
621 | /* set the prefech value */ | 637 | /* set the prefech value */ |
622 | iowrite32(0x000affaa, chip->pch_phub_base_address + 0x14); | 638 | iowrite32(0x000affaa, chip->pch_phub_base_address + 0x14); |
623 | /* set the interrupt delay value */ | 639 | /* set the interrupt delay value */ |