| /* |
| * arch/arm/mach-ambarella/init-generic.c |
| * |
| * Author: Anthony Ginger <hfjiang@ambarella.com> |
| * |
| * Copyright (C) 2004-2010, Ambarella, Inc. |
| * |
| * This program is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License as published by |
| * the Free Software Foundation; either version 2 of the License, or |
| * (at your option) any later version. |
| * |
| * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
| * |
| */ |
| |
| #include <linux/kernel.h> |
| #include <linux/init.h> |
| #include <linux/platform_device.h> |
| #include <linux/dma-mapping.h> |
| |
| #include <asm/mach-types.h> |
| #include <asm/mach/arch.h> |
| |
| #include <mach/hardware.h> |
| #include <mach/init.h> |
| #include <mach/board.h> |
| |
| #include <linux/spi/spi.h> |
| #include <linux/spi/spidev.h> |
| |
| #include <linux/i2c.h> |
| #include <linux/i2c/ak4183.h> |
| #include <linux/i2c/cy8ctmg.h> |
| |
| #include <linux/irq.h> |
| #include <linux/interrupt.h> |
| #include <linux/delay.h> |
| |
| #include <plat/ambinput.h> |
| |
| #include "board-device.h" |
| |
| #if (AUDIO_CODEC_INSTANCES == 1) |
| static struct platform_device ambarella_auc_codec0 = { |
| .name = "a2auc-codec", |
| .id = -1, |
| }; |
| #endif |
| |
| /* ==========================================================================*/ |
| static struct platform_device *ambarella_devices[] __initdata = { |
| &ambarella_adc0, |
| #ifdef CONFIG_PLAT_AMBARELLA_SUPPORT_SATA |
| &ambarella_ahci0, |
| #endif |
| #if (AUDIO_CODEC_INSTANCES == 1) |
| &ambarella_auc_codec0, |
| #endif |
| #ifdef CONFIG_PLAT_AMBARELLA_SUPPORT_HW_CRYPTO |
| &ambarella_crypto, |
| #endif |
| &ambarella_dummy_codec0, |
| #ifdef CONFIG_PLAT_AMBARELLA_SUPPORT_USB |
| &ambarella_ehci0, |
| #endif |
| #if (ETH_INSTANCES >= 1) |
| &ambarella_eth0, |
| #endif |
| #if (ETH_INSTANCES >= 2) |
| &ambarella_eth1, |
| #endif |
| &ambarella_fb0, |
| &ambarella_fb1, |
| &ambarella_i2s0, |
| #ifdef CONFIG_PLAT_AMBARELLA_SUPPORT_I2C_MUX |
| &ambarella_i2cmux, |
| #endif |
| &ambarella_idc0, |
| #if (IDC_INSTANCES >= 2) |
| &ambarella_idc1, |
| #endif |
| &ambarella_ir0, |
| #ifdef CONFIG_PLAT_AMBARELLA_SUPPORT_USB |
| &ambarella_ohci0, |
| #endif |
| &ambarella_pcm0, |
| &ambarella_pwm_platform_device0, |
| &ambarella_pwm_platform_device1, |
| &ambarella_pwm_platform_device2, |
| &ambarella_pwm_platform_device3, |
| &ambarella_pwm_platform_device4, |
| &ambarella_rtc0, |
| &ambarella_sd0, |
| #if (SD_INSTANCES >= 2) |
| &ambarella_sd1, |
| #endif |
| &ambarella_spi0, |
| #if (SPI_INSTANCES >= 2) |
| &ambarella_spi1, |
| #endif |
| #if (SPI_INSTANCES >= 3) |
| &ambarella_spi2, |
| #endif |
| #if (SPI_INSTANCES >= 4) |
| &ambarella_spi3, |
| #endif |
| &ambarella_uart, |
| #if (UART_INSTANCES >= 2) |
| &ambarella_uart1, |
| #endif |
| #if (UART_INSTANCES >= 3) |
| &ambarella_uart2, |
| #endif |
| #if (UART_INSTANCES >= 4) |
| &ambarella_uart3, |
| #endif |
| &ambarella_udc0, |
| &ambarella_wdt0, |
| &ambarella_fsg_device0, |
| &ambarella_usb_device0, |
| }; |
| |
| /* ==========================================================================*/ |
| static struct spi_board_info ambarella_spi_devices[] = { |
| { |
| .modalias = "spidev", |
| .bus_num = 0, |
| .chip_select = 0, |
| }, |
| { |
| .modalias = "spidev", |
| .bus_num = 0, |
| .chip_select = 1, |
| }, |
| { |
| .modalias = "spidev", |
| .bus_num = 0, |
| .chip_select = 2, |
| }, |
| { |
| .modalias = "spidev", |
| .bus_num = 0, |
| .chip_select = 3, |
| }, |
| #if (SPI_INSTANCES >= 2) |
| { |
| .modalias = "spidev", |
| .bus_num = 1, |
| .chip_select = 0, |
| } |
| #endif |
| }; |
| |
| /* ==========================================================================*/ |
| static struct ambarella_key_table generic_keymap[AMBINPUT_TABLE_SIZE] = { |
| {AMBINPUT_VI_KEY, {.vi_key = {0, 0, 0}}}, |
| {AMBINPUT_VI_REL, {.vi_rel = {0, 0, 0}}}, |
| {AMBINPUT_VI_ABS, {.vi_abs = {0, 0, 0}}}, |
| {AMBINPUT_VI_SW, {.vi_sw = {0, 0, 0}}}, |
| |
| {AMBINPUT_END}, |
| }; |
| |
| static struct ambarella_input_board_info generic_board_input_info = { |
| .pkeymap = generic_keymap, |
| .pinput_dev = NULL, |
| .pdev = NULL, |
| |
| .abx_max_x = 4095, |
| .abx_max_y = 4095, |
| .abx_max_pressure = 4095, |
| .abx_max_width = 16, |
| }; |
| |
| struct platform_device generic_board_input = { |
| .name = "ambarella-input", |
| .id = -1, |
| .resource = NULL, |
| .num_resources = 0, |
| .dev = { |
| .platform_data = &generic_board_input_info, |
| .dma_mask = &ambarella_dmamask, |
| .coherent_dma_mask = DMA_BIT_MASK(32), |
| } |
| }; |
| |
| |
| /* ==========================================================================*/ |
| static void __init ambarella_init_generic(void) |
| { |
| int i; |
| |
| ambarella_init_machine("Generic"); |
| |
| platform_add_devices(ambarella_devices, ARRAY_SIZE(ambarella_devices)); |
| for (i = 0; i < ARRAY_SIZE(ambarella_devices); i++) { |
| device_set_wakeup_capable(&ambarella_devices[i]->dev, 1); |
| device_set_wakeup_enable(&ambarella_devices[i]->dev, 0); |
| } |
| |
| spi_register_board_info(ambarella_spi_devices, |
| ARRAY_SIZE(ambarella_spi_devices)); |
| |
| i2c_register_board_info(0, ambarella_board_vin_infos, |
| ARRAY_SIZE(ambarella_board_vin_infos)); |
| |
| #if (IDC_SUPPORT_PIN_MUXING_FOR_HDMI == 1) |
| i2c_register_board_info(0, &ambarella_board_hdmi_info, 1); |
| #else |
| i2c_register_board_info(1, &ambarella_board_hdmi_info, 1); |
| #endif |
| |
| platform_device_register(&generic_board_input); |
| } |
| |
| /* ==========================================================================*/ |
| MACHINE_START(AMBARELLA, "Ambarella Media SoC") |
| .boot_params = CONFIG_AMBARELLA_PARAMS_PHYS, |
| .map_io = ambarella_map_io, |
| .reserve = ambarella_memblock_reserve, |
| .init_irq = ambarella_init_irq, |
| .timer = &ambarella_timer, |
| .init_machine = ambarella_init_generic, |
| MACHINE_END |
| |