diff options
Diffstat (limited to 'arch/arm/mach-msm/board-qsd8x50.c')
-rw-r--r-- | arch/arm/mach-msm/board-qsd8x50.c | 50 |
1 files changed, 37 insertions, 13 deletions
diff --git a/arch/arm/mach-msm/board-qsd8x50.c b/arch/arm/mach-msm/board-qsd8x50.c index e3cc80792d6c..ed2af4ad97ed 100644 --- a/arch/arm/mach-msm/board-qsd8x50.c +++ b/arch/arm/mach-msm/board-qsd8x50.c | |||
@@ -35,20 +35,49 @@ | |||
35 | 35 | ||
36 | extern struct sys_timer msm_timer; | 36 | extern struct sys_timer msm_timer; |
37 | 37 | ||
38 | static struct msm_gpio uart3_config_data[] = { | 38 | static const resource_size_t qsd8x50_surf_smc91x_base __initdata = 0x70000300; |
39 | { GPIO_CFG(86, 1, GPIO_INPUT, GPIO_PULL_DOWN, GPIO_2MA), "UART2_Rx"}, | 39 | static const unsigned qsd8x50_surf_smc91x_gpio __initdata = 156; |
40 | { GPIO_CFG(87, 1, GPIO_OUTPUT, GPIO_PULL_DOWN, GPIO_2MA), "UART2_Tx"}, | 40 | |
41 | /* Leave smc91x resources empty here, as we'll fill them in | ||
42 | * at run-time: they vary from board to board, and the true | ||
43 | * configuration won't be known until boot. | ||
44 | */ | ||
45 | static struct resource smc91x_resources[] __initdata = { | ||
46 | [0] = { | ||
47 | .flags = IORESOURCE_MEM, | ||
48 | }, | ||
49 | [1] = { | ||
50 | .flags = IORESOURCE_IRQ, | ||
51 | }, | ||
41 | }; | 52 | }; |
42 | 53 | ||
43 | static struct platform_device *devices[] __initdata = { | 54 | static struct platform_device smc91x_device __initdata = { |
44 | &msm_device_uart3, | 55 | .name = "smc91x", |
56 | .id = 0, | ||
57 | .num_resources = ARRAY_SIZE(smc91x_resources), | ||
58 | .resource = smc91x_resources, | ||
45 | }; | 59 | }; |
46 | 60 | ||
47 | static void msm8x50_init_uart3(void) | 61 | static int __init msm_init_smc91x(void) |
48 | { | 62 | { |
49 | msm_gpios_request_enable(uart3_config_data, | 63 | if (machine_is_qsd8x50_surf()) { |
50 | ARRAY_SIZE(uart3_config_data)); | 64 | smc91x_resources[0].start = qsd8x50_surf_smc91x_base; |
65 | smc91x_resources[0].end = qsd8x50_surf_smc91x_base + 0xff; | ||
66 | smc91x_resources[1].start = | ||
67 | gpio_to_irq(qsd8x50_surf_smc91x_gpio); | ||
68 | smc91x_resources[1].end = | ||
69 | gpio_to_irq(qsd8x50_surf_smc91x_gpio); | ||
70 | platform_device_register(&smc91x_device); | ||
71 | } | ||
72 | |||
73 | return 0; | ||
51 | } | 74 | } |
75 | module_init(msm_init_smc91x); | ||
76 | |||
77 | static struct platform_device *devices[] __initdata = { | ||
78 | &msm_device_uart3, | ||
79 | &msm_device_smd, | ||
80 | }; | ||
52 | 81 | ||
53 | static void __init qsd8x50_map_io(void) | 82 | static void __init qsd8x50_map_io(void) |
54 | { | 83 | { |
@@ -64,14 +93,11 @@ static void __init qsd8x50_init_irq(void) | |||
64 | 93 | ||
65 | static void __init qsd8x50_init(void) | 94 | static void __init qsd8x50_init(void) |
66 | { | 95 | { |
67 | msm8x50_init_uart3(); | ||
68 | platform_add_devices(devices, ARRAY_SIZE(devices)); | 96 | platform_add_devices(devices, ARRAY_SIZE(devices)); |
69 | } | 97 | } |
70 | 98 | ||
71 | MACHINE_START(QSD8X50_SURF, "QCT QSD8X50 SURF") | 99 | MACHINE_START(QSD8X50_SURF, "QCT QSD8X50 SURF") |
72 | #ifdef CONFIG_MSM_DEBUG_UART | 100 | #ifdef CONFIG_MSM_DEBUG_UART |
73 | .phys_io = MSM_DEBUG_UART_PHYS, | ||
74 | .io_pg_offst = ((MSM_DEBUG_UART_BASE) >> 18) & 0xfffc, | ||
75 | #endif | 101 | #endif |
76 | .boot_params = PHYS_OFFSET + 0x100, | 102 | .boot_params = PHYS_OFFSET + 0x100, |
77 | .map_io = qsd8x50_map_io, | 103 | .map_io = qsd8x50_map_io, |
@@ -82,8 +108,6 @@ MACHINE_END | |||
82 | 108 | ||
83 | MACHINE_START(QSD8X50A_ST1_5, "QCT QSD8X50A ST1.5") | 109 | MACHINE_START(QSD8X50A_ST1_5, "QCT QSD8X50A ST1.5") |
84 | #ifdef CONFIG_MSM_DEBUG_UART | 110 | #ifdef CONFIG_MSM_DEBUG_UART |
85 | .phys_io = MSM_DEBUG_UART_PHYS, | ||
86 | .io_pg_offst = ((MSM_DEBUG_UART_BASE) >> 18) & 0xfffc, | ||
87 | #endif | 111 | #endif |
88 | .boot_params = PHYS_OFFSET + 0x100, | 112 | .boot_params = PHYS_OFFSET + 0x100, |
89 | .map_io = qsd8x50_map_io, | 113 | .map_io = qsd8x50_map_io, |