/* Copyright (c) 2008-2009, Code Aurora Forum. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and * only version 2 as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include "devices.h" #include "timer.h" #include "socinfo.h" #include "proc_comm.h" #define MSM_SHARED_RAM_PHYS (MSM_SMI_BASE + 0x00100000) static struct resource smc91x_resources[] = { [0] = { .flags = IORESOURCE_MEM, }, [1] = { .flags = IORESOURCE_IRQ, }, }; static struct platform_device smc91x_device = { .name = "smc91x", .id = 0, .num_resources = ARRAY_SIZE(smc91x_resources), .resource = smc91x_resources, }; static struct platform_device *devices[] __initdata = { &smc91x_device, &msm_device_smd, &msm_device_dmov, &msm_device_nand, }; static void __init qsd8x50_init_irq(void) { msm_init_irq(); } static void __init qsd8x50_init_host(void) { if (machine_is_qsd8x50_ffa() || machine_is_qsd8x50a_ffa()) return; vreg_usb = vreg_get(NULL, "boost"); if (IS_ERR(vreg_usb)) { printk(KERN_ERR "%s: vreg get failed (%ld)\n", __func__, PTR_ERR(vreg_usb)); return; } platform_device_register(&msm_device_hsusb_otg); } static void __init qsd8x50_cfg_smc91x(void) { int rc = 0; if (machine_is_qsd8x50_surf() || machine_is_qsd8x50a_surf()) { smc91x_resources[0].start = 0x70000300; smc91x_resources[0].end = 0x700003ff; smc91x_resources[1].start = MSM_GPIO_TO_INT(156); smc91x_resources[1].end = MSM_GPIO_TO_INT(156); } else if (machine_is_qsd8x50_ffa() || machine_is_qsd8x50a_ffa()) { smc91x_resources[0].start = 0x84000300; smc91x_resources[0].end = 0x840003ff; smc91x_resources[1].start = MSM_GPIO_TO_INT(87); smc91x_resources[1].end = MSM_GPIO_TO_INT(87); rc = gpio_tlmm_config(GPIO_CFG(87, 0, GPIO_INPUT, GPIO_PULL_DOWN, GPIO_2MA), GPIO_ENABLE); if (rc) { printk(KERN_ERR "%s: gpio_tlmm_config=%d\n", __func__, rc); } } else printk(KERN_ERR "%s: invalid machine type\n", __func__); } static void __init qsd8x50_init(void) { if (socinfo_init() < 0) printk(KERN_ERR "%s: socinfo_init() failed!\n", __func__); qsd8x50_cfg_smc91x(); platform_add_devices(devices, ARRAY_SIZE(devices)); } static void __init qsd8x50_map_io(void) { msm_shared_ram_phys = MSM_SHARED_RAM_PHYS; msm_map_qsd8x50_io(); msm_clock_init(msm_clocks_8x50, msm_num_clocks_8x50); } MACHINE_START(QSD8X50_SURF, "QCT QSD8X50 SURF") #ifdef CONFIG_MSM_DEBUG_UART .phys_io = MSM_DEBUG_UART_PHYS, .io_pg_offst = ((MSM_DEBUG_UART_BASE) >> 18) & 0xfffc, #endif .boot_params = PHYS_OFFSET + 0x100, .map_io = qsd8x50_map_io, .init_irq = qsd8x50_init_irq, .init_machine = qsd8x50_init, .timer = &msm_timer, MACHINE_END MACHINE_START(QSD8X50_FFA, "QCT QSD8X50 FFA") #ifdef CONFIG_MSM_DEBUG_UART .phys_io = MSM_DEBUG_UART_PHYS, .io_pg_offst = ((MSM_DEBUG_UART_BASE) >> 18) & 0xfffc, #endif .boot_params = PHYS_OFFSET + 0x100, .map_io = qsd8x50_map_io, .init_irq = qsd8x50_init_irq, .init_machine = qsd8x50_init, .timer = &msm_timer, MACHINE_END MACHINE_START(QSD8X50A_SURF, "QCT QSD8X50A SURF") #ifdef CONFIG_MSM_DEBUG_UART .phys_io = MSM_DEBUG_UART_PHYS, .io_pg_offst = ((MSM_DEBUG_UART_BASE) >> 18) & 0xfffc, #endif .boot_params = PHYS_OFFSET + 0x100, .map_io = qsd8x50_map_io, .init_irq = qsd8x50_init_irq, .init_machine = qsd8x50_init, .timer = &msm_timer, MACHINE_END MACHINE_START(QSD8X50A_FFA, "QCT QSD8X50A FFA") #ifdef CONFIG_MSM_DEBUG_UART .phys_io = MSM_DEBUG_UART_PHYS, .io_pg_offst = ((MSM_DEBUG_UART_BASE) >> 18) & 0xfffc, #endif .boot_params = PHYS_OFFSET + 0x100, .map_io = qsd8x50_map_io, .init_irq = qsd8x50_init_irq, .init_machine = qsd8x50_init, .timer = &msm_timer, MACHINE_END