blob: 027b68535aa9777ab55970f311b72ac0a17d3f4a [file] [log] [blame]
/*
* arch/arm/mach-ambarella/init-elephant.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/pcf857x.h>
#include <linux/i2c/pca954x.h>
#include <linux/irq.h>
#include <linux/interrupt.h>
#include <linux/delay.h>
#include <linux/input.h>
#include <plat/ambinput.h>
#include <linux/mmc/host.h>
#include "board-device.h"
#ifdef CONFIG_TIWLAN_SDIO
#include <linux/mmc/sdio_ids.h>
#include <linux/mmc/sdio_func.h>
#include <plat/sd.h>
#include <linux/wl12xx.h>
#endif
#ifdef CONFIG_TI_ST
#include <linux/ti_wilink_st.h>
#endif
#include <sound/tlv320dac31.h>
#include <linux/rfkill-gpio.h>
#include <linux/mfd/wm831x/pdata.h>
/* ==========================================================================*/
#include <linux/pda_power.h>
#ifdef CONFIG_TIWLAN_SDIO
static struct sdio_embedded_func wifi_func_array[] = {
{
.f_class = SDIO_CLASS_NONE,
.f_maxblksize = 512,
},
{
.f_class = SDIO_CLASS_WLAN,
.f_maxblksize = 512,
},
};
#if 0
static struct embedded_sdio_data omap_wifi_emb_data = {
.cis = {
.vendor = SDIO_VENDOR_ID_TI,
.device = SDIO_DEVICE_ID_TI_WL12xx,
.blksize = 512,
.max_dtr = 48000000,
},
.cccr = {
.multi_block = 1,
.low_speed = 0,
.wide_bus = 1,
.high_power = 0,
.high_speed = 1,
.disable_cd = 1,
},
.funcs = wifi_func_array,
.quirks = MMC_QUIRK_VDD_165_195 | MMC_QUIRK_LENIENT_FUNC0,
};
#endif
#endif
#ifdef CONFIG_TI_ST
int plat_kim_suspend(struct platform_device *pdev, pm_message_t state)
{
return 0;
}
int plat_kim_resume(struct platform_device *pdev)
{
return 0;
}
/* wl128x BT, FM, GPS connectivity chip */
struct ti_st_plat_data wilink_pdata = {
// OMAP4430 use GPIO55 to control BT_EN pin, please check which GPIO mapping for WL128X BT_EN pin.
.nshutdown_gpio = GPIO(4),
// OMAP4430 UART2's system node is /dev/ttyO1, please check which UART port mapping for WL128X in the platform.
.dev_name = "/dev/ttyS1", //ambarella ttyS1
.flow_cntrl = 1,
.baud_rate = 115200,
.suspend = plat_kim_suspend,
.resume = plat_kim_resume,
};
static struct platform_device wl128x_device = {
.name = "kim",
.id = -1,
.dev.platform_data = &wilink_pdata,
};
static struct platform_device btwilink_device = {
.name = "btwilink",
.id = -1,
};
#endif
static struct platform_device amba_wlan_ar6000_pm_device = {
.name = "wlan_ar6000_pm_dev",
.id = 1,
.num_resources = 0,
.resource = NULL,
};
static struct platform_device *ambarella_devices[] __initdata = {
&ambarella_adc0,
#ifdef CONFIG_PLAT_AMBARELLA_SUPPORT_HW_CRYPTO
&ambarella_crypto,
#endif
&ambarella_ehci0,
&amba_wlan_ar6000_pm_device,
&ambarella_eth0,
&ambarella_fb0,
&ambarella_fb1,
&ambarella_i2s0,
&ambarella_pcm0,
&ambarella_dummy_codec0,
&ambarella_idc0,
&ambarella_idc1,
&ambarella_i2cmux,
&ambarella_ir0,
#ifndef CONFIG_PLAT_AMBARELLA_I1_CORTEX
&ambarella_ohci0,
#endif
&ambarella_ahci0,
&ambarella_sd0,
&ambarella_sd1,
&ambarella_spi0,
&ambarella_spi1,
&ambarella_spi2,
&ambarella_spi3,
&ambarella_spi4,
&ambarella_uart,
&ambarella_uart1,
&ambarella_uart2,
&ambarella_uart3,
&ambarella_udc0,
&ambarella_fsg_device0,
#ifdef CONFIG_TI_ST
/* TI sample code origin register of WL128X BT, FM, GPS */
&wl128x_device,
&btwilink_device,
#endif
&ambarella_usb_device0,
};
static struct platform_device *ambarella_pwm_devices[] __initdata = {
&ambarella_pwm_platform_device0,
&ambarella_pwm_platform_device1,
&ambarella_pwm_platform_device2,
&ambarella_pwm_platform_device3,
&ambarella_pwm_platform_device4,
};
/* ==========================================================================*/
static struct spi_board_info ambarella_spi_devices[] = {
[0] = {
.modalias = "spidev",
.bus_num = 0,
.chip_select = 0,
},
[1] = {
.modalias = "spidev",
.bus_num = 0,
.chip_select = 1,
},
[2] = {
.modalias = "spidev",
.bus_num = 0,
.chip_select = 2,
},
[3] = {
.modalias = "spidev",
.bus_num = 0,
.chip_select = 3,
},
[4] = {
.modalias = "spidev",
.bus_num = 0,
.chip_select = 4,
},
[5] = {
.modalias = "spidev",
.bus_num = 0,
.chip_select = 5,
},
[6] = {
.modalias = "spidev",
.bus_num = 0,
.chip_select = 6,
},
[7] = {
.modalias = "spidev",
.bus_num = 0,
.chip_select = 7,
},
[8] = {
.modalias = "spidev",
.bus_num = 1,
.chip_select = 0,
},
[9] = {
.modalias = "spidev",
.bus_num = 2,
.chip_select = 0,
},
[10] = {
.modalias = "spidev",
.bus_num = 2,
.chip_select = 1,
},
[11] = {
.modalias = "spidev",
.bus_num = 2,
.chip_select = 2,
},
[12] = {
.modalias = "spidev",
.bus_num = 2,
.chip_select = 3,
},
[13] = {
.modalias = "spidev",
.bus_num = 2,
.chip_select = 4,
},
[14] = {
.modalias = "spidev",
.bus_num = 2,
.chip_select = 5,
},
[15] = {
.modalias = "spidev",
.bus_num = 2,
.chip_select = 6,
},
[16] = {
.modalias = "spidev",
.bus_num = 2,
.chip_select = 7,
},
[17] = {
.modalias = "spidev",
.bus_num = 3,
.chip_select = 0,
},
[18] = {
.modalias = "spidev",
.bus_num = 4,
.chip_select = 0,
}
};
/* ==========================================================================*/
static struct ambarella_key_table elephant_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_IR_KEY, {.ir_key = {KEY_POWER, 3, 0x001a0015}}}, //POWER
{AMBINPUT_IR_KEY, {.ir_key = {KEY_HOME, 3, 0x001a0061}}}, //HOME
{AMBINPUT_IR_KEY, {.ir_key = {KEY_MENU, 3, 0x001a004d}}}, //MENU
{AMBINPUT_IR_KEY, {.ir_key = {KEY_ESC, 3, 0x001a0063}}}, //BACK
{AMBINPUT_IR_KEY, {.ir_key = {KEY_SEND, 3, 0x001a0010}}}, //CALL
{AMBINPUT_IR_KEY, {.ir_key = {KEY_END, 3, 0x001a0020}}}, //ENDCALL
{AMBINPUT_IR_SW, {.ir_key = {0, 0, 0x001a003d}}}, //SW0 OFF
{AMBINPUT_IR_SW, {.ir_key = {0, 1, 0x001a0064}}}, //SW0 ON
{AMBINPUT_IR_KEY, {.ir_key = {KEY_VOLUMEUP,3, 0x001a0077}}}, //VOLUME_UP
{AMBINPUT_IR_KEY, {.ir_key = {KEY_VOLUMEDOWN,3, 0x001a0078}}}, //VOLUME_DOWN
{AMBINPUT_IR_KEY, {.ir_key = {KEY_OK, 3, 0x001a0076}}}, //DPAD_CENTER
{AMBINPUT_IR_KEY, {.ir_key = {KEY_S, 3, 0x001a0073}}}, //S
{AMBINPUT_IR_KEY, {.ir_key = {KEY_W, 3, 0x001a0072}}}, //W
{AMBINPUT_IR_KEY, {.ir_key = {KEY_A, 3, 0x001a0075}}}, //A
{AMBINPUT_IR_KEY, {.ir_key = {KEY_D, 3, 0x001a0074}}}, //D
{AMBINPUT_IR_KEY, {.ir_key = {KEY_SEARCH, 3, 0x001a007e}}}, //SEARCH
{AMBINPUT_GPIO_KEY, {.gpio_key = {KEY_HOME, 1, 1, GPIO(120), IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING}}},
{AMBINPUT_GPIO_KEY, {.gpio_key = {KEY_MENU, 1, 1, GPIO(121), IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING}}},
{AMBINPUT_GPIO_KEY, {.gpio_key = {KEY_ESC, 1, 1, GPIO(122), IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING}}},
{AMBINPUT_GPIO_KEY, {.gpio_key = {KEY_POWER, 1, 1, GPIO(123), IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING}}},
{AMBINPUT_END},
};
static struct ambarella_key_table elephant_keymap_vendor1[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_GPIO_KEY, {.gpio_key = {KEY_ESC, 0, 1, GPIO(186), IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING}}},
{AMBINPUT_END},
};
static struct ambarella_key_table elephant_keymap_vendor51[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_GPIO_KEY, {.gpio_key = {KEY_HOME, 1, 1, GPIO(144), IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING}}},
{AMBINPUT_GPIO_KEY, {.gpio_key = {KEY_MENU, 1, 1, GPIO(145), IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING}}},
{AMBINPUT_GPIO_KEY, {.gpio_key = {KEY_ESC, 1, 1, GPIO(146), IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING}}},
{AMBINPUT_GPIO_KEY, {.gpio_key = {KEY_SEARCH, 1, 1, GPIO(147), IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING}}},
{AMBINPUT_END},
};
static struct ambarella_key_table elephant_keymap_vendor61[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_GPIO_KEY, {.gpio_key = {KEY_CAMERA, 1, 1, GPIO(42), IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING}}},
{AMBINPUT_END},
};
static struct ambarella_key_table elephant_keymap_vendor71[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_GPIO_KEY, {.gpio_key = {KEY_OK, 1, 1, GPIO(54), IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING}}},
{AMBINPUT_GPIO_KEY, {.gpio_key = {KEY_UP, 1, 1, GPIO(79), IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING}}},
{AMBINPUT_GPIO_KEY, {.gpio_key = {KEY_DOWN, 1, 1, GPIO(80), IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING}}},
{AMBINPUT_GPIO_KEY, {.gpio_key = {KEY_RIGHT, 1, 1, GPIO(82), IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING}}},
{AMBINPUT_GPIO_KEY, {.gpio_key = {KEY_LEFT, 1, 1, GPIO(83), IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING}}},
{AMBINPUT_END},
};
static struct ambarella_key_table elephant_keymap_vendor81[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_key_table elephant_keymap_evk[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_IR_KEY, {.ir_key = {KEY_POWER, 3, 0x001a0015}}}, //POWER
{AMBINPUT_IR_KEY, {.ir_key = {KEY_HOME, 3, 0x001a0061}}}, //HOME
{AMBINPUT_IR_KEY, {.ir_key = {KEY_MENU, 3, 0x001a004d}}}, //MENU
{AMBINPUT_IR_KEY, {.ir_key = {KEY_ESC, 3, 0x001a0063}}}, //BACK
{AMBINPUT_IR_KEY, {.ir_key = {KEY_SEND, 3, 0x001a0010}}}, //CALL
{AMBINPUT_IR_KEY, {.ir_key = {KEY_END, 3, 0x001a0020}}}, //ENDCALL
{AMBINPUT_IR_SW, {.ir_key = {0, 0, 0x001a003d}}}, //SW0 OFF
{AMBINPUT_IR_SW, {.ir_key = {0, 1, 0x001a0064}}}, //SW0 ON
{AMBINPUT_IR_KEY, {.ir_key = {KEY_VOLUMEUP,3, 0x001a0077}}}, //VOLUME_UP
{AMBINPUT_IR_KEY, {.ir_key = {KEY_VOLUMEDOWN,3, 0x001a0078}}}, //VOLUME_DOWN
{AMBINPUT_IR_KEY, {.ir_key = {KEY_OK, 3, 0x001a0076}}}, //DPAD_CENTER
{AMBINPUT_IR_KEY, {.ir_key = {KEY_S, 3, 0x001a0073}}}, //S
{AMBINPUT_IR_KEY, {.ir_key = {KEY_W, 3, 0x001a0072}}}, //W
{AMBINPUT_IR_KEY, {.ir_key = {KEY_A, 3, 0x001a0075}}}, //A
{AMBINPUT_IR_KEY, {.ir_key = {KEY_D, 3, 0x001a0074}}}, //D
{AMBINPUT_IR_KEY, {.ir_key = {KEY_SEARCH, 3, 0x001a007e}}}, //SEARCH
{AMBINPUT_ADC_KEY, {.adc_key = {KEY_RESERVED, 0, 2, 3000, 4095}}},
{AMBINPUT_ADC_KEY, {.adc_key = {KEY_HOME, 0, 2, 1820, 2250}}}, //HOME
{AMBINPUT_ADC_KEY, {.adc_key = {KEY_MENU, 0, 2, 1450, 1750}}}, //MENU
{AMBINPUT_ADC_KEY, {.adc_key = {KEY_ESC, 0, 2, 1050, 1350}}}, //ESC
{AMBINPUT_ADC_KEY, {.adc_key = {KEY_SEARCH, 0, 2, 700, 900}}}, //SEARCH
//{AMBINPUT_ADC_KEY, {.adc_key = {KEY_HP, 0, 2, 300, 500}}}, //FOCUS, do not use
{AMBINPUT_ADC_KEY, {.adc_key = {KEY_CAMERA, 0, 2, 0, 100}}}, //CAMERA
{AMBINPUT_ADC_KEY, {.adc_key = {KEY_RESERVED, 0, 4, 3000, 4095}}},
{AMBINPUT_ADC_KEY, {.adc_key = {KEY_VOLUMEDOWN, 0, 4, 1750, 2150}}}, //VOLUME DOWN
{AMBINPUT_ADC_KEY, {.adc_key = {KEY_VOLUMEUP, 0, 4, 1300, 1650}}}, //VOLUME UP
{AMBINPUT_ADC_KEY, {.adc_key = {KEY_STOP, 0, 4, 850, 1100}}}, //STOP
{AMBINPUT_ADC_KEY, {.adc_key = {KEY_RECORD, 0, 4, 400, 600}}}, //RECORD
{AMBINPUT_GPIO_KEY, {.gpio_key = {KEY_SEND, 0, 0, GPIO(187),
IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING}}}, //CALL (GPIO_K2)
{AMBINPUT_GPIO_KEY, {.gpio_key = {KEY_END, 0, 0, GPIO(191),
IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING}}}, //ENDCALL (GPIO_K1)
{AMBINPUT_END},
};
static struct ambarella_input_board_info elephant_board_input_info = {
.pkeymap = elephant_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 elephant_board_input = {
.name = "ambarella-input",
.id = -1,
.resource = NULL,
.num_resources = 0,
.dev = {
.platform_data = &elephant_board_input_info,
.dma_mask = &ambarella_dmamask,
.coherent_dma_mask = DMA_BIT_MASK(32),
}
};
static struct rfkill_gpio_platform_data elephant_board_bt_info = {
.name = "bt-gpio",
.reset_gpio = GPIO(190),
.shutdown_gpio = -1,
.type = RFKILL_TYPE_BLUETOOTH,
};
static struct platform_device elephant_bt_rfkill = {
.name = "rfkill_gpio",
.id = -1,
.resource = NULL,
.num_resources = 0,
.dev = {
.platform_data = &elephant_board_bt_info,
.dma_mask = &ambarella_dmamask,
.coherent_dma_mask = DMA_BIT_MASK(32),
}
};
/* ==========================================================================*/
static struct pcf857x_platform_data elephant_board_ext_gpio0_pdata = {
.gpio_base = EXT_GPIO(0),
};
static struct i2c_board_info elephant_board_ext_gpio_info = {
.type = "pcf8574a",
.addr = 0x3e,
.flags = 0,
.platform_data = &elephant_board_ext_gpio0_pdata,
};
static struct pca954x_platform_mode elephant_board_ext_i2c_mode = {
.adap_id = 0,
.deselect_on_exit = 1,
};
static struct pca954x_platform_data elephant_board_ext_i2c_pdata = {
.modes = &elephant_board_ext_i2c_mode,
.num_modes = 0,
};
static struct i2c_board_info elephant_board_ext_i2c_info = {
.type = "pca9542",
.addr = 0x70,
.flags = 0,
.platform_data = &elephant_board_ext_i2c_pdata,
};
/*==========================================================================*/
#define TLV320DAC31_RESET_PIN 83
#define TLV320DAC31_RESET_DALAY 5
static struct dac31_platform_data aof_tlv320dac31_pdata = {
.rst_pin = TLV320DAC31_RESET_PIN,
.rst_delay = TLV320DAC31_RESET_DALAY,
};
static struct i2c_board_info pj203_board_codec_i2c_info = {
I2C_BOARD_INFO("tlv320dac31",0x18),
.platform_data = &aof_tlv320dac31_pdata,
};
/* ==========================================================================*/
static void __init ambarella_init_elephant(void)
{
int i, ret;
int use_bub_default = 1;
int use_ambarella_rtc0 = 1;
int use_ambarella_wdt0 = 1;
int use_pmic_tps6586x = 0;
ambarella_init_machine("Elephant");
/* Config SD */
fio_default_owner = SELECT_FIO_SDIO;
ambarella_platform_sd_controller0.slot[0].gpio_cd.irq_gpio = SMIO_5;
ambarella_platform_sd_controller0.slot[0].gpio_cd.irq_line = gpio_to_irq(SMIO_5);
ambarella_platform_sd_controller0.slot[0].gpio_cd.irq_type = IRQ_TYPE_EDGE_BOTH;
ambarella_platform_sd_controller0.slot[0].gpio_cd.irq_gpio_mode = GPIO_FUNC_SW_INPUT;
ambarella_platform_sd_controller0.slot[1].gpio_cd.irq_gpio = SMIO_44;
ambarella_platform_sd_controller0.slot[1].gpio_cd.irq_line = gpio_to_irq(SMIO_44);
ambarella_platform_sd_controller0.slot[1].gpio_cd.irq_type = IRQ_TYPE_EDGE_BOTH;
ambarella_platform_sd_controller0.slot[1].gpio_wp.gpio_id = SMIO_45;
if (AMBARELLA_BOARD_TYPE(system_rev) == AMBARELLA_BOARD_TYPE_EVK) {
switch (AMBARELLA_BOARD_REV(system_rev)) {
case 'D':
use_pmic_tps6586x = 1;
case 'C':
case 'B':
ambarella_platform_sd_controller1.slot[0].ext_power.gpio_id = GPIO(111);
ambarella_platform_sd_controller1.slot[0].ext_power.active_level = GPIO_HIGH;
ambarella_platform_sd_controller1.slot[0].ext_power.active_delay = 300;
/* the cs_pin of spi0.1 is used to determine wm8994's
* I2C address, and the cs_pin of spi0.4, spi0,5, spi0.6
* spi0.7 are used as I2S signals, so we need to prevent
* them from be modified by SPI driver */
ambarella_spi0_cs_pins[1] = -1;
ambarella_spi0_cs_pins[4] = -1;
ambarella_spi0_cs_pins[5] = -1;
ambarella_spi0_cs_pins[6] = -1;
ambarella_spi0_cs_pins[7] = -1;
ambarella_init_wm8994();
case 'A':
ambarella_board_generic.lcd_reset.gpio_id = GPIO(105);
ambarella_board_generic.lcd_reset.active_level = GPIO_LOW;
ambarella_board_generic.lcd_reset.active_delay = 10;
ambarella_board_generic.lcd_backlight.gpio_id = GPIO(16);
ambarella_board_generic.lcd_backlight.active_level = GPIO_HIGH;
ambarella_board_generic.lcd_backlight.active_delay = 1;
ambarella_board_generic.lcd_spi_hw.bus_id = 2;
ambarella_board_generic.lcd_spi_hw.cs_id = 0;
ambarella_board_generic.lcd_spi_cfg.spi_mode = 0;
ambarella_board_generic.lcd_spi_cfg.cfs_dfs = 16;
ambarella_board_generic.lcd_spi_cfg.baud_rate = 5000000;
ambarella_board_generic.lcd_spi_cfg.cs_change = 0;
ambarella_board_generic.touch_panel_irq.irq_gpio = GPIO(44);
ambarella_board_generic.touch_panel_irq.irq_line = gpio_to_irq(44);
ambarella_board_generic.touch_panel_irq.irq_type = IRQF_TRIGGER_FALLING;
ambarella_board_generic.touch_panel_irq.irq_gpio_val = GPIO_LOW;
ambarella_board_generic.touch_panel_irq.irq_gpio_mode = GPIO_FUNC_SW_INPUT;
ambarella_board_generic.hdmi_extpower.gpio_id = GPIO(104);
ambarella_board_generic.hdmi_extpower.active_level = GPIO_HIGH;
ambarella_board_generic.hdmi_extpower.active_delay = 1;
ambarella_board_generic.wifi_power.gpio_id = GPIO(109);
ambarella_board_generic.wifi_power.active_level = GPIO_HIGH;
ambarella_board_generic.wifi_power.active_delay = 300;
ambarella_board_generic.wifi_sd_bus = 0;
ambarella_board_generic.wifi_sd_slot = 1;
ambarella_board_generic.pmic_irq.irq_gpio = GPIO(54);
ambarella_board_generic.pmic_irq.irq_line = gpio_to_irq(54);
ambarella_board_generic.pmic_irq.irq_type = IRQF_TRIGGER_FALLING;
ambarella_board_generic.pmic_irq.irq_gpio_val = GPIO_LOW;
ambarella_board_generic.pmic_irq.irq_gpio_mode = GPIO_FUNC_SW_INPUT;
ambarella_board_generic.sata_power.gpio_id = GPIO(101);
ambarella_board_generic.sata_power.active_level = GPIO_HIGH;
ambarella_board_generic.sata_power.active_delay = 1;
ambarella_board_generic.power_control.gpio_id = GPIO(120);
ambarella_board_generic.power_control.active_level = GPIO_LOW;
if(use_pmic_tps6586x){
ambarella_ti6586x_board_info.irq = ambarella_board_generic.pmic_irq.irq_line;
i2c_register_board_info(0, &ambarella_ti6586x_board_info, 1);
i2c_register_board_info(0, &ambarella_bq27410_board_info,1);
}else{
memcpy(ambarella_spi_devices[12].modalias, "wm8310", 6);
ambarella_spi_devices[12].max_speed_hz = 500000;
ambarella_spi_devices[12].platform_data = &wm8310_default_pdata;
ambarella_spi_devices[12].irq = ambarella_board_generic.pmic_irq.irq_line;
use_ambarella_rtc0 = 0;
use_ambarella_wdt0= 0;
}
ambarella_board_generic.gsensor_power.gpio_id = GPIO(151);
ambarella_board_generic.gsensor_power.active_level = GPIO_HIGH;
ambarella_board_generic.gsensor_power.active_delay = 10;
ambarella_board_generic.gsensor_irq.irq_gpio = GPIO(49);
ambarella_board_generic.gsensor_irq.irq_line = gpio_to_irq(GPIO(49));
ambarella_board_generic.gsensor_irq.irq_type = IRQF_TRIGGER_RISING;
ambarella_board_generic.gsensor_irq.irq_gpio_val = GPIO_LOW;
ambarella_board_generic.gsensor_irq.irq_gpio_mode = GPIO_FUNC_SW_INPUT;
ambarella_eth0_platform_info.mii_id = 0;
ambarella_eth0_platform_info.phy_id = 0x001cc912;
ambarella_eth0_platform_info.phy_irq.irq_gpio = GPIO(21);
ambarella_eth0_platform_info.phy_irq.irq_line = gpio_to_irq(GPIO(21));
ambarella_eth0_platform_info.phy_irq.irq_type = IRQF_TRIGGER_LOW;
ambarella_eth0_platform_info.phy_irq.irq_gpio_val = GPIO_LOW;
ambarella_eth0_platform_info.phy_irq.irq_gpio_mode = GPIO_FUNC_SW_INPUT;
ambarella_eth0_platform_info.mii_power.gpio_id = GPIO(97);
ambarella_eth0_platform_info.mii_power.active_level = GPIO_HIGH;
ambarella_eth0_platform_info.mii_power.active_delay = 20;
ambarella_eth0_platform_info.mii_reset.gpio_id = GPIO(98);
ambarella_eth0_platform_info.mii_reset.active_level = GPIO_LOW;
ambarella_eth0_platform_info.mii_reset.active_delay = 20;
ambarella_platform_sd_controller0.slot[0].ext_power.gpio_id = GPIO(157);
ambarella_platform_sd_controller0.slot[0].ext_power.active_level = GPIO_HIGH;
ambarella_platform_sd_controller0.slot[0].ext_power.active_delay = 300;
ambarella_platform_sd_controller0.slot[0].max_blk_sz = SD_BLK_SZ_512KB;
ambarella_platform_sd_controller0.slot[0].fixed_cd = 1;
ambarella_platform_sd_controller0.slot[0].gpio_cd.irq_gpio = -1;
ambarella_platform_sd_controller0.slot[0].gpio_cd.irq_line = -1;
ambarella_platform_sd_controller0.slot[0].fixed_wp = 0;
ambarella_platform_sd_controller0.slot[0].gpio_wp.gpio_id = -1;
ambarella_platform_sd_controller0.slot[0].caps |= (MMC_CAP_8_BIT_DATA | MMC_CAP_NONREMOVABLE);
ambarella_platform_sd_controller0.slot[1].fixed_cd = 0;
ambarella_platform_sd_controller0.slot[1].gpio_cd.irq_gpio = -1;
ambarella_platform_sd_controller0.slot[1].gpio_cd.irq_line = -1;
ambarella_platform_sd_controller0.slot[1].fixed_wp = 0;
ambarella_platform_sd_controller0.slot[1].gpio_wp.gpio_id = -1;
ambarella_platform_sd_controller1.wait_tmo = (5 * HZ);
ambarella_platform_sd_controller1.slot[0].max_blk_sz = SD_BLK_SZ_512KB;
ambarella_platform_sd_controller1.slot[0].caps |= (MMC_CAP_8_BIT_DATA | MMC_CAP_BUS_WIDTH_TEST);
ambarella_tm1726_board_info.irq = ambarella_board_generic.touch_panel_irq.irq_line;
i2c_register_board_info(2, &ambarella_tm1726_board_info, 1);
//vin0: Rear Sensor vin1: Front Sensor
ambarella_board_generic.vin0_power.gpio_id = GPIO(122);
ambarella_board_generic.vin0_power.active_level = GPIO_HIGH;
ambarella_board_generic.vin0_power.active_delay = 1;
i2c_register_board_info(0, &ambarella_board_vin_infos[0], 1);
ambarella_board_generic.vin1_power.gpio_id = GPIO(121);
ambarella_board_generic.vin1_power.active_level = GPIO_HIGH;
ambarella_board_generic.vin1_power.active_delay = 1;
ambarella_board_generic.vin1_reset.gpio_id = GPIO(123);
ambarella_board_generic.vin1_reset.active_level = GPIO_LOW;
ambarella_board_generic.vin1_reset.active_delay = 1;
ambarella_board_generic.vin1_af_power.gpio_id = GPIO(124);
ambarella_board_generic.vin1_af_power.active_level = GPIO_HIGH;
ambarella_board_generic.vin1_af_power.active_delay = 1;
i2c_register_board_info(2, &ambarella_board_vin_infos[1], 1);
platform_device_register(&elephant_bt_rfkill);
platform_device_register(&lcd_1p3831);
platform_device_register(&i1evk_cpufreq_device);
elephant_board_input_info.pkeymap = elephant_keymap_evk;
ambarella_board_generic.pwm0_config.max_duty = 255;
ambarella_board_generic.pwm0_config.default_duty = 255;
ambarella_platform_adc_temper_controller0.adc_temper_channel = ADC_CH9;
ambarella_platform_adc_temper_controller0.temper_curve = amb_temper_curve;
platform_device_register(&ambarella_adc_temper);
use_bub_default = 0;
break;
default:
pr_warn("%s: Unknown EVK Rev[%d]\n", __func__, AMBARELLA_BOARD_REV(system_rev));
break;
}
}
if (AMBARELLA_BOARD_TYPE(system_rev) == AMBARELLA_BOARD_TYPE_VENDOR) {
switch (AMBARELLA_BOARD_REV(system_rev)) {
case 51:
ambarella_board_generic.lcd_reset.gpio_id = GPIO(103);
ambarella_board_generic.lcd_reset.active_level = GPIO_LOW;
ambarella_board_generic.lcd_reset.active_delay = 10;
ambarella_board_generic.lcd_backlight.gpio_id = GPIO(16);
ambarella_board_generic.lcd_backlight.active_level = GPIO_HIGH;
ambarella_board_generic.lcd_backlight.active_delay = 1;
ambarella_board_generic.lcd_spi_hw.bus_id = 1;
ambarella_board_generic.lcd_spi_hw.cs_id = 0;
ambarella_board_generic.lcd_spi_cfg.spi_mode = 0;
ambarella_board_generic.lcd_spi_cfg.cfs_dfs = 16;
ambarella_board_generic.lcd_spi_cfg.baud_rate = 5000000;
ambarella_board_generic.lcd_spi_cfg.cs_change = 0;
ambarella_board_generic.touch_panel_irq.irq_gpio = GPIO(118);
ambarella_board_generic.touch_panel_irq.irq_line = gpio_to_irq(118);
ambarella_board_generic.touch_panel_irq.irq_type = IRQF_TRIGGER_FALLING;
ambarella_board_generic.touch_panel_irq.irq_gpio_val = GPIO_LOW;
ambarella_board_generic.touch_panel_irq.irq_gpio_mode = GPIO_FUNC_SW_INPUT;
ambarella_board_generic.gsensor_irq.irq_gpio = GPIO(49);
ambarella_board_generic.gsensor_irq.irq_line = gpio_to_irq(GPIO(49));
ambarella_board_generic.gsensor_irq.irq_type = IRQF_TRIGGER_RISING;
ambarella_board_generic.gsensor_irq.irq_gpio_val = GPIO_LOW;
ambarella_board_generic.gsensor_irq.irq_gpio_mode = GPIO_FUNC_SW_INPUT;
ambarella_eth0_platform_info.mii_id = 1;
ambarella_eth0_platform_info.phy_id = 0x00008201;
ambarella_eth0_platform_info.mii_reset.gpio_id = GPIO(187);
ambarella_eth0_platform_info.mii_reset.active_level = GPIO_LOW;
ambarella_eth0_platform_info.mii_reset.active_delay = 20;
ambarella_platform_sd_controller0.slot[0].max_blk_sz = SD_BLK_SZ_512KB;
ambarella_platform_sd_controller0.slot[0].fixed_cd = 1;
ambarella_platform_sd_controller0.slot[0].gpio_cd.irq_gpio = -1;
ambarella_platform_sd_controller0.slot[0].gpio_cd.irq_line = -1;
ambarella_platform_sd_controller0.slot[0].fixed_wp = 0;
ambarella_platform_sd_controller0.slot[0].gpio_wp.gpio_id = -1;
ambarella_platform_sd_controller0.slot[0].caps |=
(MMC_CAP_8_BIT_DATA | MMC_CAP_NONREMOVABLE);
ambarella_platform_sd_controller0.slot[1].max_blk_sz = SD_BLK_SZ_128KB;
ambarella_platform_sd_controller1.slot[0].max_blk_sz = SD_BLK_SZ_512KB;
ambarella_platform_sd_controller1.slot[0].fixed_cd = 1;
ambarella_platform_sd_controller1.slot[0].gpio_cd.irq_gpio = -1;
ambarella_platform_sd_controller1.slot[0].gpio_cd.irq_line = -1;
ambarella_platform_sd_controller1.slot[0].fixed_wp = 0;
ambarella_platform_sd_controller1.slot[0].gpio_wp.gpio_id = -1;
ambarella_platform_sd_controller1.slot[0].caps |=
(MMC_CAP_8_BIT_DATA | MMC_CAP_NONREMOVABLE);
ambarella_tm1726_board_info.irq = ambarella_board_generic.touch_panel_irq.irq_line;
i2c_register_board_info(2, &ambarella_tm1726_board_info, 1);
//vin0: Rear Sensor vin1: Front Sensor
ambarella_board_generic.vin0_power.gpio_id = GPIO(113);
ambarella_board_generic.vin0_power.active_level = GPIO_HIGH;
ambarella_board_generic.vin0_power.active_delay = 10;
ambarella_board_generic.vin0_reset.gpio_id = GPIO(112);
ambarella_board_generic.vin0_reset.active_level = GPIO_LOW;
ambarella_board_generic.vin0_reset.active_delay = 1;
ambarella_board_generic.vin1_power.gpio_id = GPIO(115);
ambarella_board_generic.vin1_power.active_level = GPIO_HIGH;
ambarella_board_generic.vin1_power.active_delay = 1;
ambarella_board_generic.vin1_reset.gpio_id = GPIO(114);
ambarella_board_generic.vin1_reset.active_level = GPIO_LOW;
ambarella_board_generic.vin1_reset.active_delay = 1;
i2c_register_board_info(2, ambarella_board_vin_infos, ARRAY_SIZE(ambarella_board_vin_infos));
platform_device_register(&lcd_1p3831);
elephant_board_input_info.pkeymap = elephant_keymap_vendor51;
ambarella_board_generic.pwm0_config.max_duty = 255;
ambarella_board_generic.pwm0_config.default_duty = 255;
use_bub_default = 0;
break;
case 61:
/* the cs_pin of spi0.4, spi0,5, spi0.6, spi0.7 are used as I2S signals,
* and the cs_pin of spi2.6 is used for controlling external speaker,
* so we need to prevent them from be modified by SPI driver */
ambarella_spi0_cs_pins[4] = -1;
ambarella_spi0_cs_pins[5] = -1;
ambarella_spi0_cs_pins[6] = -1;
ambarella_spi0_cs_pins[7] = -1;
ambarella_spi2_cs_pins[6] = -1;
ambarella_init_es8328(0, 0);
/* usb0 don't use over-current protection function */
ambarella_board_generic.uhc_use_ocp &= ~0x1;
ambarella_board_generic.lcd_reset.gpio_id = GPIO(105);
ambarella_board_generic.lcd_reset.active_level = GPIO_LOW;
ambarella_board_generic.lcd_reset.active_delay = 10;
ambarella_board_generic.lcd_backlight.gpio_id = GPIO(16);
ambarella_board_generic.lcd_backlight.active_level = GPIO_HIGH;
ambarella_board_generic.lcd_backlight.active_delay = 1;
ambarella_board_generic.lcd_spi_hw.bus_id = 2;
ambarella_board_generic.lcd_spi_hw.cs_id = 0;
ambarella_board_generic.lcd_spi_cfg.spi_mode = 0;
ambarella_board_generic.lcd_spi_cfg.cfs_dfs = 16;
ambarella_board_generic.lcd_spi_cfg.baud_rate = 5000000;
ambarella_board_generic.lcd_spi_cfg.cs_change = 0;
ambarella_board_generic.touch_panel_irq.irq_gpio = GPIO(43);
ambarella_board_generic.touch_panel_irq.irq_line = gpio_to_irq(43);
ambarella_board_generic.touch_panel_irq.irq_type = IRQF_TRIGGER_FALLING;
ambarella_board_generic.touch_panel_irq.irq_gpio_val = GPIO_LOW;
ambarella_board_generic.touch_panel_irq.irq_gpio_mode = GPIO_FUNC_SW_INPUT;
ambarella_board_generic.touch_panel_power.gpio_id = GPIO(144);
ambarella_board_generic.touch_panel_power.active_level = GPIO_HIGH;
ambarella_board_generic.touch_panel_power.active_delay = 1;
ambarella_board_generic.touch_panel_reset.gpio_id = GPIO(44);
ambarella_board_generic.touch_panel_reset.active_level = GPIO_LOW;
ambarella_board_generic.touch_panel_reset.active_delay = 1;
ambarella_board_generic.hdmi_extpower.gpio_id = GPIO(104);
ambarella_board_generic.hdmi_extpower.active_level = GPIO_HIGH;
ambarella_board_generic.hdmi_extpower.active_delay = 1;
ambarella_board_generic.wifi_power.gpio_id = GPIO(109);
ambarella_board_generic.wifi_power.active_level = GPIO_HIGH;
ambarella_board_generic.wifi_power.active_delay = 300;
ambarella_board_generic.wifi_sd_bus = 0;
ambarella_board_generic.wifi_sd_slot = 1;
ambarella_board_generic.pmic_irq.irq_gpio = GPIO(54);
ambarella_board_generic.pmic_irq.irq_line = gpio_to_irq(54);
ambarella_board_generic.pmic_irq.irq_type = IRQF_TRIGGER_FALLING;
ambarella_board_generic.pmic_irq.irq_gpio_val = GPIO_LOW;
ambarella_board_generic.pmic_irq.irq_gpio_mode = GPIO_FUNC_SW_INPUT;
ambarella_board_generic.power_control.gpio_id = GPIO(120);
ambarella_board_generic.power_control.active_level = GPIO_LOW;
memcpy(ambarella_spi_devices[12].modalias, "wm8310", 6);
ambarella_spi_devices[12].max_speed_hz = 500000;
ambarella_spi_devices[12].platform_data = &wm8310_default_pdata;
ambarella_spi_devices[12].irq = ambarella_board_generic.pmic_irq.irq_line;
use_ambarella_rtc0 = 0;
use_ambarella_wdt0= 0;
ambarella_board_generic.gsensor_power.gpio_id = GPIO(151);
ambarella_board_generic.gsensor_power.active_level = GPIO_HIGH;
ambarella_board_generic.gsensor_power.active_delay = 10;
ambarella_board_generic.gsensor_irq.irq_gpio = GPIO(49);
ambarella_board_generic.gsensor_irq.irq_line = gpio_to_irq(GPIO(49));
ambarella_board_generic.gsensor_irq.irq_type = IRQF_TRIGGER_RISING;
ambarella_board_generic.gsensor_irq.irq_gpio_val = GPIO_LOW;
ambarella_board_generic.gsensor_irq.irq_gpio_mode = GPIO_FUNC_SW_INPUT;
ambarella_eth0_platform_info.mii_id = 1;
ambarella_eth0_platform_info.phy_id = 0x00008201;
ambarella_eth0_platform_info.phy_irq.irq_gpio = GPIO(21);
ambarella_eth0_platform_info.phy_irq.irq_line = gpio_to_irq(GPIO(21));
ambarella_eth0_platform_info.phy_irq.irq_type = IRQF_TRIGGER_LOW;
ambarella_eth0_platform_info.phy_irq.irq_gpio_val = GPIO_LOW;
ambarella_eth0_platform_info.phy_irq.irq_gpio_mode = GPIO_FUNC_SW_INPUT;
ambarella_eth0_platform_info.mii_power.gpio_id = GPIO(97);
ambarella_eth0_platform_info.mii_power.active_level = GPIO_HIGH;
ambarella_eth0_platform_info.mii_power.active_delay = 20;
ambarella_eth0_platform_info.mii_reset.gpio_id = GPIO(98);
ambarella_eth0_platform_info.mii_reset.active_level = GPIO_LOW;
ambarella_eth0_platform_info.mii_reset.active_delay = 20;
ambarella_platform_sd_controller0.slot[0].max_blk_sz = SD_BLK_SZ_512KB;
ambarella_platform_sd_controller0.slot[0].ext_power.gpio_id = GPIO(157);
ambarella_platform_sd_controller0.slot[0].ext_power.active_level = GPIO_HIGH;
ambarella_platform_sd_controller0.slot[0].ext_power.active_delay = 300;
ambarella_platform_sd_controller0.slot[1].max_blk_sz = SD_BLK_SZ_128KB;
ambarella_platform_sd_controller0.slot[1].fixed_cd = 0;
ambarella_platform_sd_controller0.slot[1].gpio_cd.irq_gpio = -1;
ambarella_platform_sd_controller0.slot[1].gpio_cd.irq_line = -1;
ambarella_platform_sd_controller0.slot[1].fixed_wp = 0;
ambarella_platform_sd_controller0.slot[1].gpio_wp.gpio_id = -1;
ambarella_platform_sd_controller1.slot[0].max_blk_sz = SD_BLK_SZ_512KB;
ambarella_platform_sd_controller1.slot[0].ext_power.gpio_id = GPIO(111);
ambarella_platform_sd_controller1.slot[0].ext_power.active_level = GPIO_HIGH;
ambarella_platform_sd_controller1.slot[0].ext_power.active_delay = 300;
ambarella_ft540_board_info.irq = ambarella_board_generic.touch_panel_irq.irq_line;
i2c_register_board_info(2, &ambarella_ft540_board_info, 1);
ambarella_board_generic.vin0_power.gpio_id = GPIO(101);
ambarella_board_generic.vin0_power.active_level = GPIO_HIGH;
ambarella_board_generic.vin0_power.active_delay = 1;
ambarella_board_generic.vin0_reset.gpio_id = GPIO(107);
ambarella_board_generic.vin0_reset.active_level = GPIO_LOW;
ambarella_board_generic.vin0_reset.active_delay = 1;
i2c_register_board_info(2, &ambarella_board_vin_infos[0], 1);
ambarella_board_generic.vin1_power.gpio_id = GPIO(100);
ambarella_board_generic.vin1_power.active_level = GPIO_HIGH;
ambarella_board_generic.vin1_power.active_delay = 1;
ambarella_board_generic.vin1_reset.gpio_id = GPIO(102);
ambarella_board_generic.vin1_reset.active_level = GPIO_LOW;
ambarella_board_generic.vin1_reset.active_delay = 1;
i2c_register_board_info(0, &ambarella_board_vin_infos[1], 1);
platform_device_register(&elephant_bt_rfkill);
elephant_board_input_info.pkeymap = elephant_keymap_vendor61;
ambarella_board_generic.pwm0_config.max_duty = 255;
ambarella_board_generic.pwm0_config.default_duty = 0;
ambarella_board_generic.pwm0_config.active_level = 0;
ambarella_board_generic.pwm1_config.default_duty = 0;
ambarella_board_generic.pwm2_config.default_duty = 0;
ambarella_board_generic.pwm3_config.default_duty = 0;
ambarella_board_generic.pwm4_config.default_duty = 0;
use_bub_default = 0;
break;
case 62:
/* the cs_pin of spi0.4, spi0,5, spi0.6, spi0.7 are used as I2S signals,
* and the cs_pin of spi2.6 is used for controlling external speaker,
* so we need to prevent them from be modified by SPI driver */
ambarella_spi0_cs_pins[4] = -1;
ambarella_spi0_cs_pins[5] = -1;
ambarella_spi0_cs_pins[6] = -1;
ambarella_spi0_cs_pins[7] = -1;
ambarella_spi2_cs_pins[6] = -1;
ambarella_init_es8328(0, 0);
/* usb0 don't use over-current protection function */
ambarella_board_generic.uhc_use_ocp &= ~0x1;
ambarella_board_generic.lcd_reset.gpio_id = GPIO(105);
ambarella_board_generic.lcd_reset.active_level = GPIO_LOW;
ambarella_board_generic.lcd_reset.active_delay = 10;
ambarella_board_generic.lcd_backlight.gpio_id = GPIO(16);
ambarella_board_generic.lcd_backlight.active_level = GPIO_HIGH;
ambarella_board_generic.lcd_backlight.active_delay = 1;
ambarella_board_generic.lcd_spi_hw.bus_id = 2;
ambarella_board_generic.lcd_spi_hw.cs_id = 0;
ambarella_board_generic.lcd_spi_cfg.spi_mode = 0;
ambarella_board_generic.lcd_spi_cfg.cfs_dfs = 16;
ambarella_board_generic.lcd_spi_cfg.baud_rate = 5000000;
ambarella_board_generic.lcd_spi_cfg.cs_change = 0;
ambarella_board_generic.touch_panel_irq.irq_gpio = GPIO(44);
ambarella_board_generic.touch_panel_irq.irq_line = gpio_to_irq(44);
ambarella_board_generic.touch_panel_irq.irq_type = IRQF_TRIGGER_FALLING;
ambarella_board_generic.touch_panel_irq.irq_gpio_val = GPIO_LOW;
ambarella_board_generic.touch_panel_irq.irq_gpio_mode = GPIO_FUNC_SW_INPUT;
ambarella_board_generic.touch_panel_power.gpio_id = GPIO(144);
ambarella_board_generic.touch_panel_power.active_level = GPIO_HIGH;
ambarella_board_generic.touch_panel_power.active_delay = 1;
ambarella_board_generic.touch_panel_reset.gpio_id = GPIO(43);
ambarella_board_generic.touch_panel_reset.active_level = GPIO_LOW;
ambarella_board_generic.touch_panel_reset.active_delay = 1;
ambarella_board_generic.hdmi_extpower.gpio_id = GPIO(104);
ambarella_board_generic.hdmi_extpower.active_level = GPIO_HIGH;
ambarella_board_generic.hdmi_extpower.active_delay = 1;
ambarella_board_generic.wifi_power.gpio_id = GPIO(109);
ambarella_board_generic.wifi_power.active_level = GPIO_HIGH;
ambarella_board_generic.wifi_power.active_delay = 300;
ambarella_board_generic.wifi_sd_bus = 1;
ambarella_board_generic.wifi_sd_slot = 0;
ambarella_board_generic.pmic_irq.irq_gpio = GPIO(54);
ambarella_board_generic.pmic_irq.irq_line = gpio_to_irq(54);
ambarella_board_generic.pmic_irq.irq_type = IRQF_TRIGGER_FALLING;
ambarella_board_generic.pmic_irq.irq_gpio_val = GPIO_LOW;
ambarella_board_generic.pmic_irq.irq_gpio_mode = GPIO_FUNC_SW_INPUT;
ambarella_board_generic.power_control.gpio_id = GPIO(99);
ambarella_board_generic.power_control.active_level = GPIO_LOW;
memcpy(ambarella_spi_devices[12].modalias, "wm8310", 6);
ambarella_spi_devices[12].max_speed_hz = 500000;
ambarella_spi_devices[12].platform_data = &md800_wm8310_default_pdata;
ambarella_spi_devices[12].irq = ambarella_board_generic.pmic_irq.irq_line;
use_ambarella_rtc0 = 0;
ambarella_board_generic.gsensor_power.gpio_id = GPIO(151);
ambarella_board_generic.gsensor_power.active_level = GPIO_HIGH;
ambarella_board_generic.gsensor_power.active_delay = 10;
ambarella_board_generic.gsensor_irq.irq_gpio = GPIO(49);
ambarella_board_generic.gsensor_irq.irq_line = gpio_to_irq(GPIO(49));
ambarella_board_generic.gsensor_irq.irq_type = IRQF_TRIGGER_RISING;
ambarella_board_generic.gsensor_irq.irq_gpio_val = GPIO_LOW;
ambarella_board_generic.gsensor_irq.irq_gpio_mode = GPIO_FUNC_SW_INPUT;
ambarella_eth0_platform_info.mii_id = 1;
ambarella_eth0_platform_info.phy_id = 0x00008201;
ambarella_eth0_platform_info.phy_irq.irq_gpio = GPIO(21);
ambarella_eth0_platform_info.phy_irq.irq_line = gpio_to_irq(GPIO(21));
ambarella_eth0_platform_info.phy_irq.irq_type = IRQF_TRIGGER_LOW;
ambarella_eth0_platform_info.phy_irq.irq_gpio_val = GPIO_LOW;
ambarella_eth0_platform_info.phy_irq.irq_gpio_mode = GPIO_FUNC_SW_INPUT;
ambarella_eth0_platform_info.mii_power.gpio_id = GPIO(97);
ambarella_eth0_platform_info.mii_power.active_level = GPIO_HIGH;
ambarella_eth0_platform_info.mii_power.active_delay = 20;
ambarella_eth0_platform_info.mii_reset.gpio_id = GPIO(98);
ambarella_eth0_platform_info.mii_reset.active_level = GPIO_LOW;
ambarella_eth0_platform_info.mii_reset.active_delay = 20;
fio_default_owner = SELECT_FIO_FREE;
ambarella_platform_sd_controller0.slot[0].ext_power.gpio_id = GPIO(157);
ambarella_platform_sd_controller0.slot[0].ext_power.active_level = GPIO_HIGH;
ambarella_platform_sd_controller0.slot[0].ext_power.active_delay = 300;
ambarella_platform_sd_controller0.slot[0].max_blk_sz = SD_BLK_SZ_512KB;
ambarella_platform_sd_controller0.slot[0].fixed_cd = 1;
ambarella_platform_sd_controller0.slot[0].gpio_cd.irq_gpio = -1;
ambarella_platform_sd_controller0.slot[0].gpio_cd.irq_line = -1;
ambarella_platform_sd_controller0.slot[0].fixed_wp = 0;
ambarella_platform_sd_controller0.slot[0].gpio_wp.gpio_id = -1;
ambarella_platform_sd_controller0.slot[0].caps |= (MMC_CAP_8_BIT_DATA | MMC_CAP_NONREMOVABLE);
ambarella_platform_sd_controller0.slot[1].max_blk_sz = SD_BLK_SZ_512KB;
ambarella_platform_sd_controller0.slot[1].cd_delay = 500;
ambarella_platform_sd_controller1.slot[0].max_blk_sz = SD_BLK_SZ_128KB;
ambarella_platform_sd_controller1.slot[0].fixed_cd = 0;
ambarella_platform_sd_controller1.slot[0].gpio_cd.irq_gpio = -1;
ambarella_platform_sd_controller1.slot[0].gpio_cd.irq_line = -1;
ambarella_platform_sd_controller1.slot[0].fixed_wp = 0;
ambarella_platform_sd_controller1.slot[0].gpio_wp.gpio_id = -1;
ambarella_ft540_board_info.irq = ambarella_board_generic.touch_panel_irq.irq_line;
i2c_register_board_info(2, &ambarella_ft540_board_info, 1);
ambarella_board_generic.vin0_power.gpio_id = GPIO(101);
ambarella_board_generic.vin0_power.active_level = GPIO_HIGH;
ambarella_board_generic.vin0_power.active_delay = 1;
ambarella_board_generic.vin0_af_power.gpio_id = GPIO(103);
ambarella_board_generic.vin0_af_power.active_level = GPIO_HIGH;
ambarella_board_generic.vin0_af_power.active_delay = 1;
ambarella_board_generic.vin0_reset.gpio_id = GPIO(107);
ambarella_board_generic.vin0_reset.active_level = GPIO_LOW;
ambarella_board_generic.vin0_reset.active_delay = 1;
i2c_register_board_info(2, &ambarella_board_vin_infos[0], 1);
ambarella_board_generic.vin1_power.gpio_id = GPIO(100);
ambarella_board_generic.vin1_power.active_level = GPIO_HIGH;
ambarella_board_generic.vin1_power.active_delay = 1;
ambarella_board_generic.vin1_reset.gpio_id = GPIO(102);
ambarella_board_generic.vin1_reset.active_level = GPIO_LOW;
ambarella_board_generic.vin1_reset.active_delay = 1;
i2c_register_board_info(0, &ambarella_board_vin_infos[1], 1);
platform_device_register(&elephant_bt_rfkill);
elephant_board_input_info.pkeymap = elephant_keymap_vendor61;
ambarella_board_generic.pwm0_config.max_duty = 255;
ambarella_board_generic.pwm0_config.default_duty = 0;
ambarella_board_generic.pwm0_config.active_level = 0;
ambarella_board_generic.pwm1_config.default_duty = 0;
ambarella_board_generic.pwm2_config.default_duty = 0;
ambarella_board_generic.pwm3_config.default_duty = 0;
ambarella_board_generic.pwm4_config.default_duty = 0;
use_bub_default = 0;
break;
case 63:
/* the cs_pin of spi0.4, spi0,5, spi0.6, spi0.7 are used as I2S signals,
* and the cs_pin of spi2.6 is used for controlling external speaker,
* so we need to prevent them from be modified by SPI driver */
ambarella_spi0_cs_pins[4] = -1;
ambarella_spi0_cs_pins[5] = -1;
ambarella_spi0_cs_pins[6] = -1;
ambarella_spi0_cs_pins[7] = -1;
ambarella_spi2_cs_pins[6] = -1;
/* usb0 don't use over-current protection function */
ambarella_board_generic.uhc_use_ocp &= ~0x1;
ambarella_board_generic.lcd_reset.gpio_id = GPIO(105);
ambarella_board_generic.lcd_reset.active_level = GPIO_LOW;
ambarella_board_generic.lcd_reset.active_delay = 10;
ambarella_board_generic.lcd_backlight.gpio_id = GPIO(16);
ambarella_board_generic.lcd_backlight.active_level = GPIO_HIGH;
ambarella_board_generic.lcd_backlight.active_delay = 1;
ambarella_board_generic.lcd_spi_hw.bus_id = 2;
ambarella_board_generic.lcd_spi_hw.cs_id = 0;
ambarella_board_generic.lcd_spi_cfg.spi_mode = 0;
ambarella_board_generic.lcd_spi_cfg.cfs_dfs = 16;
ambarella_board_generic.lcd_spi_cfg.baud_rate = 5000000;
ambarella_board_generic.lcd_spi_cfg.cs_change = 0;
ambarella_board_generic.touch_panel_irq.irq_gpio = GPIO(44);
ambarella_board_generic.touch_panel_irq.irq_line = gpio_to_irq(44);
ambarella_board_generic.touch_panel_irq.irq_type = IRQF_TRIGGER_FALLING;
ambarella_board_generic.touch_panel_irq.irq_gpio_val = GPIO_LOW;
ambarella_board_generic.touch_panel_irq.irq_gpio_mode = GPIO_FUNC_SW_INPUT;
ambarella_board_generic.touch_panel_power.gpio_id = GPIO(144);
ambarella_board_generic.touch_panel_power.active_level = GPIO_HIGH;
ambarella_board_generic.touch_panel_power.active_delay = 1;
ambarella_board_generic.touch_panel_reset.gpio_id = GPIO(43);
ambarella_board_generic.touch_panel_reset.active_level = GPIO_LOW;
ambarella_board_generic.touch_panel_reset.active_delay = 1;
ambarella_board_generic.hdmi_extpower.gpio_id = GPIO(104);
ambarella_board_generic.hdmi_extpower.active_level = GPIO_HIGH;
ambarella_board_generic.hdmi_extpower.active_delay = 1;
ambarella_board_generic.pmic_irq.irq_gpio = GPIO(54);
ambarella_board_generic.pmic_irq.irq_line = gpio_to_irq(54);
ambarella_board_generic.pmic_irq.irq_type = IRQF_TRIGGER_FALLING;
ambarella_board_generic.pmic_irq.irq_gpio_val = GPIO_LOW;
ambarella_board_generic.pmic_irq.irq_gpio_mode = GPIO_FUNC_SW_INPUT;
ambarella_board_generic.power_control.gpio_id = GPIO(99);
ambarella_board_generic.power_control.active_level = GPIO_LOW;
memcpy(ambarella_spi_devices[12].modalias, "wm8310", 6);
ambarella_spi_devices[12].max_speed_hz = 500000;
ambarella_spi_devices[12].platform_data = &md800_wm8310_default_pdata;
ambarella_spi_devices[12].irq = ambarella_board_generic.pmic_irq.irq_line;
use_ambarella_rtc0 = 0;
ambarella_board_generic.gsensor_power.gpio_id = GPIO(151);
ambarella_board_generic.gsensor_power.active_level = GPIO_HIGH;
ambarella_board_generic.gsensor_power.active_delay = 10;
ambarella_board_generic.gsensor_irq.irq_gpio = GPIO(49);
ambarella_board_generic.gsensor_irq.irq_line = gpio_to_irq(GPIO(49));
ambarella_board_generic.gsensor_irq.irq_type = IRQF_TRIGGER_RISING;
ambarella_board_generic.gsensor_irq.irq_gpio_val = GPIO_LOW;
ambarella_board_generic.gsensor_irq.irq_gpio_mode = GPIO_FUNC_SW_INPUT;
ambarella_eth0_platform_info.mii_id = 1;
ambarella_eth0_platform_info.phy_id = 0x00008201;
ambarella_eth0_platform_info.phy_irq.irq_gpio = GPIO(21);
ambarella_eth0_platform_info.phy_irq.irq_line = gpio_to_irq(GPIO(21));
ambarella_eth0_platform_info.phy_irq.irq_type = IRQF_TRIGGER_LOW;
ambarella_eth0_platform_info.phy_irq.irq_gpio_val = GPIO_LOW;
ambarella_eth0_platform_info.phy_irq.irq_gpio_mode = GPIO_FUNC_SW_INPUT;
ambarella_eth0_platform_info.mii_power.gpio_id = GPIO(97);
ambarella_eth0_platform_info.mii_power.active_level = GPIO_HIGH;
ambarella_eth0_platform_info.mii_power.active_delay = 20;
ambarella_eth0_platform_info.mii_reset.gpio_id = GPIO(98);
ambarella_eth0_platform_info.mii_reset.active_level = GPIO_LOW;
ambarella_eth0_platform_info.mii_reset.active_delay = 20;
fio_default_owner = SELECT_FIO_FREE;
ambarella_platform_sd_controller0.slot[0].max_blk_sz = SD_BLK_SZ_512KB;
ambarella_platform_sd_controller0.slot[0].fixed_cd = 1;
ambarella_platform_sd_controller0.slot[0].gpio_cd.irq_gpio = -1;
ambarella_platform_sd_controller0.slot[0].gpio_cd.irq_line = -1;
ambarella_platform_sd_controller0.slot[0].fixed_wp = 0;
ambarella_platform_sd_controller0.slot[0].gpio_wp.gpio_id = -1;
ambarella_platform_sd_controller0.slot[0].caps |= (MMC_CAP_8_BIT_DATA | MMC_CAP_NONREMOVABLE);
ambarella_platform_sd_controller0.slot[1].gpio_cd.irq_gpio = GPIO(75);
ambarella_platform_sd_controller0.slot[1].gpio_cd.irq_line = gpio_to_irq(GPIO(75));
ambarella_platform_sd_controller0.slot[1].gpio_cd.irq_type = IRQ_TYPE_EDGE_BOTH;
ambarella_platform_sd_controller0.slot[1].gpio_wp.gpio_id = GPIO(76);
ambarella_platform_sd_controller1.slot[0].max_blk_sz = SD_BLK_SZ_128KB;
ambarella_platform_sd_controller1.slot[0].fixed_cd = 0;
ambarella_platform_sd_controller1.slot[0].gpio_cd.irq_gpio = -1;
ambarella_platform_sd_controller1.slot[0].gpio_cd.irq_line = -1;
ambarella_platform_sd_controller1.slot[0].fixed_wp = 0;
ambarella_platform_sd_controller1.slot[0].gpio_wp.gpio_id = -1;
ambarella_ft540_board_info.irq = ambarella_board_generic.touch_panel_irq.irq_line;
i2c_register_board_info(2, &ambarella_ft540_board_info, 1);
ambarella_board_generic.vin0_power.gpio_id = GPIO(101);
ambarella_board_generic.vin0_power.active_level = GPIO_HIGH;
ambarella_board_generic.vin0_power.active_delay = 1;
ambarella_board_generic.vin0_af_power.gpio_id = GPIO(103);
ambarella_board_generic.vin0_af_power.active_level = GPIO_HIGH;
ambarella_board_generic.vin0_af_power.active_delay = 1;
ambarella_board_generic.vin0_reset.gpio_id = GPIO(107);
ambarella_board_generic.vin0_reset.active_level = GPIO_LOW;
ambarella_board_generic.vin0_reset.active_delay = 1;
i2c_register_board_info(2, &ambarella_board_vin_infos[0], 1);
ambarella_board_generic.vin1_power.gpio_id = GPIO(100);
ambarella_board_generic.vin1_power.active_level = GPIO_HIGH;
ambarella_board_generic.vin1_power.active_delay = 1;
ambarella_board_generic.vin1_reset.gpio_id = GPIO(102);
ambarella_board_generic.vin1_reset.active_level = GPIO_LOW;
ambarella_board_generic.vin1_reset.active_delay = 1;
i2c_register_board_info(0, &ambarella_board_vin_infos[1], 1);
platform_device_register(&elephant_bt_rfkill);
elephant_board_input_info.pkeymap = elephant_keymap_vendor61;
ambarella_board_generic.pwm0_config.max_duty = 255;
ambarella_board_generic.pwm0_config.default_duty = 0;
ambarella_board_generic.pwm0_config.active_level = 0;
ambarella_board_generic.pwm1_config.default_duty = 0;
ambarella_board_generic.pwm2_config.default_duty = 0;
ambarella_board_generic.pwm3_config.default_duty = 0;
ambarella_board_generic.pwm4_config.default_duty = 0;
use_bub_default = 0;
break;
case 2:
ambarella_board_generic.wifi_power.gpio_id = GPIO(128);
ambarella_board_generic.wifi_power.active_level = GPIO_HIGH;
ambarella_board_generic.wifi_power.active_delay = 300;
ambarella_board_generic.wifi_sd_bus = 0;
ambarella_board_generic.wifi_sd_slot = 1;
case 1:
case 3:
ambarella_board_generic.lcd_power.gpio_id = GPIO(41);
ambarella_board_generic.lcd_power.active_level = GPIO_HIGH;
ambarella_board_generic.lcd_power.active_delay = 1;
ambarella_board_generic.lcd_reset.gpio_id = GPIO(32);
ambarella_board_generic.lcd_reset.active_level = GPIO_LOW;
ambarella_board_generic.lcd_reset.active_delay = 1;
ambarella_board_generic.lcd_backlight.gpio_id = GPIO(16);
ambarella_board_generic.lcd_backlight.active_level = GPIO_HIGH;
ambarella_board_generic.lcd_backlight.active_delay = 1;
ambarella_board_generic.lcd_spi_hw.bus_id = 0;
ambarella_board_generic.lcd_spi_hw.cs_id = 1;
ambarella_board_generic.touch_panel_reset.gpio_id = GPIO(29);
ambarella_board_generic.touch_panel_reset.active_level = GPIO_LOW;
ambarella_board_generic.touch_panel_reset.active_delay = 1;
ambarella_board_generic.touch_panel_irq.irq_gpio = GPIO(51);
ambarella_board_generic.touch_panel_irq.irq_line = gpio_to_irq(51);
ambarella_board_generic.touch_panel_irq.irq_type = IRQF_TRIGGER_FALLING;
ambarella_board_generic.touch_panel_irq.irq_gpio_val = GPIO_LOW;
ambarella_board_generic.touch_panel_irq.irq_gpio_mode = GPIO_FUNC_SW_INPUT;
ambarella_platform_sd_controller0.slot[0].use_bb = 0;
ambarella_platform_sd_controller0.slot[0].fixed_cd = 0;
ambarella_platform_sd_controller0.slot[0].gpio_cd.irq_gpio = -1;
ambarella_platform_sd_controller0.slot[0].gpio_cd.irq_line = -1;
ambarella_platform_sd_controller0.slot[0].fixed_wp = 0;
ambarella_platform_sd_controller0.slot[0].gpio_wp.gpio_id = -1;
ambarella_platform_sd_controller0.slot[1].max_blk_sz = SD_BLK_SZ_128KB;
ambarella_platform_sd_controller0.slot[1].fixed_cd = 0;
ambarella_platform_sd_controller0.slot[1].gpio_cd.irq_gpio = -1;
ambarella_platform_sd_controller0.slot[1].gpio_cd.irq_line = -1;
ambarella_platform_sd_controller0.slot[1].fixed_wp = 0;
ambarella_platform_sd_controller0.slot[1].gpio_wp.gpio_id = -1;
ambarella_platform_sd_controller1.slot[0].max_blk_sz = SD_BLK_SZ_512KB;
ambarella_platform_sd_controller1.slot[0].caps |= (MMC_CAP_8_BIT_DATA | MMC_CAP_BUS_WIDTH_TEST);
ambarella_nt11001_board_info.irq = ambarella_board_generic.touch_panel_irq.irq_line;
ambarella_nt11001_board_info.flags = 0;
i2c_register_board_info(0, &ambarella_nt11001_board_info, 1);
elephant_board_input_info.pkeymap = elephant_keymap_vendor1;
ambarella_board_generic.pwm0_config.max_duty = 255;
ambarella_board_generic.pwm0_config.default_duty = 255;
use_bub_default = 0;
break;
case 71:
/* the cs_pin of spi0.1 is used to determine wm8994's
* I2C address, and the cs_pin of spi0.4, spi0,5, spi0.6
* spi0.7 are used as I2S signals, so we need to prevent
* them from be modified by SPI driver */
ambarella_spi0_cs_pins[1] = -1;
ambarella_spi0_cs_pins[4] = -1;
ambarella_spi0_cs_pins[5] = -1;
ambarella_spi0_cs_pins[6] = -1;
ambarella_spi0_cs_pins[7] = -1;
ambarella_init_tlv320aic326x(0, 0);
ambarella_board_generic.lcd_reset.gpio_id = GPIO(113);
ambarella_board_generic.lcd_reset.active_level = GPIO_LOW;
ambarella_board_generic.lcd_reset.active_delay = 10;
ambarella_board_generic.lcd_backlight.gpio_id = GPIO(16);
ambarella_board_generic.lcd_backlight.active_level = GPIO_HIGH;
ambarella_board_generic.lcd_backlight.active_delay = 1;
ambarella_board_generic.lcd_spi_hw.bus_id = 2;
ambarella_board_generic.lcd_spi_hw.cs_id = 0;
ambarella_board_generic.lcd_spi_cfg.spi_mode = 0;
ambarella_board_generic.lcd_spi_cfg.cfs_dfs = 16;
ambarella_board_generic.lcd_spi_cfg.baud_rate = 5000000;
ambarella_board_generic.lcd_spi_cfg.cs_change = 0;
ambarella_board_generic.touch_panel_irq.irq_gpio = GPIO(11);
ambarella_board_generic.touch_panel_irq.irq_line = gpio_to_irq(11);
ambarella_board_generic.touch_panel_irq.irq_type = IRQF_TRIGGER_FALLING;
ambarella_board_generic.touch_panel_irq.irq_gpio_val = GPIO_LOW;
ambarella_board_generic.touch_panel_irq.irq_gpio_mode = GPIO_FUNC_SW_INPUT;
ambarella_board_generic.touch_panel_reset.gpio_id = GPIO(187);
ambarella_board_generic.touch_panel_reset.active_level = GPIO_LOW;
ambarella_board_generic.touch_panel_reset.active_delay = 1;
ambarella_board_generic.wifi_power.gpio_id = GPIO(109);
ambarella_board_generic.wifi_power.active_level = GPIO_HIGH;
ambarella_board_generic.wifi_power.active_delay = 300;
ambarella_board_generic.wifi_sd_bus = 0;
ambarella_board_generic.wifi_sd_slot = 1;
ambarella_board_generic.sata_power.gpio_id = GPIO(101);
ambarella_board_generic.sata_power.active_level = GPIO_HIGH;
ambarella_board_generic.sata_power.active_delay = 1;
ambarella_board_generic.power_control.gpio_id = GPIO(120);
ambarella_board_generic.power_control.active_level = GPIO_LOW;
ambarella_platform_sd_controller0.slot[0].ext_power.gpio_id = GPIO(157);
ambarella_platform_sd_controller0.slot[0].ext_power.active_level = GPIO_HIGH;
ambarella_platform_sd_controller0.slot[0].ext_power.active_delay = 300;
ambarella_platform_sd_controller0.slot[0].max_blk_sz = SD_BLK_SZ_512KB;
ambarella_platform_sd_controller0.slot[0].fixed_cd = 1;
ambarella_platform_sd_controller0.slot[0].gpio_cd.irq_gpio = -1;
ambarella_platform_sd_controller0.slot[0].gpio_cd.irq_line = -1;
ambarella_platform_sd_controller0.slot[0].fixed_wp = 0;
ambarella_platform_sd_controller0.slot[0].gpio_wp.gpio_id = -1;
ambarella_platform_sd_controller0.slot[0].caps |= (MMC_CAP_8_BIT_DATA | MMC_CAP_NONREMOVABLE);
ambarella_platform_sd_controller0.slot[1].ext_power.gpio_id = GPIO(111);
ambarella_platform_sd_controller0.slot[1].ext_power.active_level = GPIO_HIGH;
ambarella_platform_sd_controller0.slot[1].ext_power.active_delay = 300;
ambarella_platform_sd_controller0.slot[1].gpio_cd.irq_gpio = GPIO(75);
ambarella_platform_sd_controller0.slot[1].gpio_cd.irq_line = gpio_to_irq(GPIO(75));
ambarella_platform_sd_controller0.slot[1].gpio_cd.irq_type = IRQ_TYPE_EDGE_BOTH;
ambarella_platform_sd_controller0.slot[1].gpio_wp.gpio_id = GPIO(76);
ambarella_platform_sd_controller1.wait_tmo = (5 * HZ);
ambarella_platform_sd_controller1.slot[0].max_blk_sz = SD_BLK_SZ_512KB;
ambarella_platform_sd_controller1.slot[0].caps |= (MMC_CAP_8_BIT_DATA | MMC_CAP_BUS_WIDTH_TEST);
#ifdef CONFIG_TIWLAN_SDIO
//ambarella_platform_sd_controller1.slot[0].embedded_sdio = &omap_wifi_emb_data;
//ambarella_platform_sd_controller1.slot[0].register_status_notify = &omap_wifi_status_register;
//ambarella_platform_sd_controller1.slot[0].card_detect = &omap_wifi_status;
#endif
/*<-------------------------------------wl12xx start --------------------------------------------->*/
/*-->WiFi_EN=GPIO97 WiFi_IRQ=GPIO98 BT_EN=GPIO96<--*/
#ifdef CONFIG_TIWLAN_SDIO
ambarella_board_generic.wifi_sd_bus = 1;
ambarella_board_generic.wifi_sd_slot = 0;
ambarella_board_generic.wifi_irq.irq_gpio = GPIO(98);
ambarella_board_generic.wifi_irq.irq_line = gpio_to_irq(98);
ambarella_board_generic.wifi_irq.irq_type = IRQF_TRIGGER_FALLING;
ambarella_board_generic.wifi_irq.irq_gpio_val = GPIO_LOW;
ambarella_board_generic.wifi_irq.irq_gpio_mode = GPIO_FUNC_SW_INPUT;
ambarella_board_generic.wifi_power.gpio_id = GPIO(97);
ambarella_board_generic.wifi_power.active_level = GPIO_HIGH;
ambarella_board_generic.wifi_power.active_delay = 300;
printk("wifi GPIO setting!!!\r\n");
#endif
#ifdef CONFIG_TI_ST
ambarella_board_generic.bt_power.gpio_id = GPIO(96);
ambarella_board_generic.bt_power.active_level = GPIO_HIGH;
ambarella_board_generic.bt_power.active_delay = 1;
ambarella_set_gpio_output(&ambarella_board_generic.bt_power, 0);
mdelay(10);
ambarella_set_gpio_output(&ambarella_board_generic.bt_power, 1);
mdelay(100);
ambarella_set_gpio_output(&ambarella_board_generic.bt_power, 0);
printk("tristan debug wl1273 has ready \r\n");
#endif
/*<----------------------------------- wl12xxx end-------------------------------------------->*/
//vin0: Rear Sensor vin1: Front Sensor
ambarella_board_generic.vin0_power.gpio_id = GPIO(189);
ambarella_board_generic.vin0_power.active_level = GPIO_HIGH;
ambarella_board_generic.vin0_power.active_delay = 1;
ambarella_board_generic.vin0_reset.gpio_id = GPIO(151);
ambarella_board_generic.vin0_reset.active_level = GPIO_LOW;
ambarella_board_generic.vin0_reset.active_delay = 1;
i2c_register_board_info(0, &ambarella_board_vin_infos[0], 1);
i2c_register_board_info(2, &ambarella_board_vin_infos[1], 1);
ambarella_hx8526_board_info.irq = ambarella_board_generic.touch_panel_irq.irq_line;
ambarella_hx8526_board_info.flags = 0;
i2c_register_board_info(2, &ambarella_hx8526_board_info, 1);
platform_device_register(&elephant_bt_rfkill);
platform_device_register(&i1evk_cpufreq_device);
elephant_board_input_info.pkeymap = elephant_keymap_vendor71;
ambarella_board_generic.pwm0_config.max_duty = 255;
ambarella_board_generic.pwm0_config.default_duty = 255;
ambarella_platform_adc_temper_controller0.adc_temper_channel = 9;
platform_device_register(&ambarella_adc_temper);
use_bub_default = 0;
break;
case 81:
/* usb0 don't use over-current protection function */
ambarella_board_generic.uhc_use_ocp &= ~0x1;
/* Config SD */
fio_default_owner = SELECT_FIO_FREE;
ambarella_platform_sd_controller0.slot[0].fixed_cd = 0;
ambarella_platform_sd_controller0.slot[0].gpio_cd.irq_gpio = -1;
ambarella_platform_sd_controller0.slot[0].gpio_cd.irq_line = -1;
ambarella_platform_sd_controller0.slot[0].gpio_cd.irq_type = -1;
ambarella_platform_sd_controller0.slot[0].fixed_wp = 0;
ambarella_platform_sd_controller0.slot[1].fixed_cd = 0;
ambarella_platform_sd_controller0.slot[1].gpio_cd.irq_gpio = -1;
ambarella_platform_sd_controller0.slot[1].gpio_cd.irq_line = -1;
ambarella_platform_sd_controller0.slot[1].gpio_cd.irq_type = -1;
ambarella_platform_sd_controller0.slot[1].fixed_wp = 0;
ambarella_platform_sd_controller0.slot[1].gpio_wp.gpio_id = -1;
ambarella_platform_sd_controller1.clk_limit = 40000000;
ambarella_platform_sd_controller1.slot[0].fixed_cd = 0;
ambarella_board_generic.wifi_power.gpio_id = GPIO(109);
ambarella_board_generic.wifi_power.active_level = GPIO_HIGH;
ambarella_board_generic.wifi_power.active_delay = 300;
ambarella_board_generic.wifi_sd_bus = 1;
ambarella_board_generic.wifi_sd_slot = 0;
use_ambarella_rtc0 = 0;
use_bub_default = 0;
i2c_register_board_info(0,&pj203_board_codec_i2c_info,1);
ambarella_platform_adc_temper_controller0.adc_temper_channel =
ADC_CH0 |ADC_CH1 | ADC_CH2 | ADC_CH3 | ADC_CH7 | ADC_CH8 | ADC_CH9;
platform_device_register(&ambarella_adc_temper);
elephant_board_input_info.pkeymap = elephant_keymap_vendor81;
break;
default:
pr_warn("%s: Unknown VENDOR Rev[%d]\n", __func__, AMBARELLA_BOARD_REV(system_rev));
break;
}
}
if (use_bub_default) {
pr_info("%s: Default BUB config:\n", __func__);
ambarella_platform_sd_controller1.slot[0].ext_power.gpio_id = GPIO(106);
ambarella_platform_sd_controller1.slot[0].ext_power.active_level = GPIO_HIGH;
ambarella_platform_sd_controller1.slot[0].ext_power.active_delay = 300;
ambarella_board_generic.lcd_reset.gpio_id = GPIO(46);
ambarella_board_generic.lcd_reset.active_level = GPIO_LOW;
ambarella_board_generic.lcd_reset.active_delay = 1;
ambarella_board_generic.lcd_spi_hw.bus_id = 3;
ambarella_board_generic.lcd_spi_hw.cs_id = 0;
ambarella_board_generic.touch_panel_irq.irq_gpio = GPIO(45);
ambarella_board_generic.touch_panel_irq.irq_line = gpio_to_irq(45);
ambarella_board_generic.touch_panel_irq.irq_type = IRQF_TRIGGER_FALLING;
ambarella_board_generic.touch_panel_irq.irq_gpio_val = GPIO_LOW;
ambarella_board_generic.touch_panel_irq.irq_gpio_mode = GPIO_FUNC_SW_INPUT;
ambarella_board_generic.vin0_reset.gpio_id = GPIO(12);
ambarella_board_generic.vin0_reset.active_level = GPIO_LOW;
ambarella_board_generic.vin0_reset.active_delay = 100;
ambarella_eth0_platform_info.mii_id = 0;
ambarella_eth0_platform_info.phy_id = 0x001cc912;
ambarella_tm1510_board_info.irq = ambarella_board_generic.touch_panel_irq.irq_line;
/*<-------------------------------------wl12xx start --------------------------------------------->*/
/*-->WiFi_EN=GPIO2 WiFi_IRQ=GPIO3 BT_EN=GPIO4<--*/
#ifdef CONFIG_TIWLAN_SDIO
ambarella_board_generic.wifi_sd_bus = 0;
ambarella_board_generic.wifi_sd_slot = 0;
ambarella_board_generic.wifi_irq.irq_gpio = GPIO(3);
ambarella_board_generic.wifi_irq.irq_line = gpio_to_irq(3);
ambarella_board_generic.wifi_irq.irq_type = IRQF_TRIGGER_FALLING;
ambarella_board_generic.wifi_irq.irq_gpio_val = GPIO_LOW;
ambarella_board_generic.wifi_irq.irq_gpio_mode = GPIO_FUNC_SW_INPUT;
ambarella_board_generic.wifi_power.gpio_id = GPIO(2);
ambarella_board_generic.wifi_power.active_level = GPIO_HIGH;
ambarella_board_generic.wifi_power.active_delay = 300;
#endif
#ifdef CONFIG_TI_ST
ambarella_board_generic.bt_power.gpio_id = GPIO(4);
ambarella_board_generic.bt_power.active_level = GPIO_HIGH;
ambarella_board_generic.bt_power.active_delay = 1;
ambarella_set_gpio_output(&ambarella_board_generic.bt_power, 0);
mdelay(10);
ambarella_set_gpio_output(&ambarella_board_generic.bt_power, 1);
mdelay(100);
ambarella_set_gpio_output(&ambarella_board_generic.bt_power, 0);
#endif
/*<----------------------------------- wl12xxx end-------------------------------------------->*/
i2c_register_board_info(2, &ambarella_tm1510_board_info, 1);
i2c_register_board_info(0, &elephant_board_ext_gpio_info, 1);
i2c_register_board_info(0, &elephant_board_ext_i2c_info, 1);
i2c_register_board_info(2, ambarella_board_vin_infos, ARRAY_SIZE(ambarella_board_vin_infos));
}
ambarella_platform_ir_controller0.protocol = AMBA_IR_PROTOCOL_SONY;
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);
}
for (i = 0; i < ARRAY_SIZE(ambarella_pwm_devices); i++) {
if (i == 1 && AMBARELLA_BOARD_TYPE(system_rev) ==
AMBARELLA_BOARD_TYPE_BUB)
continue;
if (i == 2 && AMBARELLA_BOARD_TYPE(system_rev) ==
AMBARELLA_BOARD_TYPE_VENDOR &&
AMBARELLA_BOARD_REV(system_rev) == 2)
continue;
if (i == 2 && AMBARELLA_BOARD_TYPE(system_rev) ==
AMBARELLA_BOARD_TYPE_BUB)
continue;
if (i == 4 && AMBARELLA_BOARD_TYPE(system_rev) ==
AMBARELLA_BOARD_TYPE_EVK)
continue;
if (i == 4 && AMBARELLA_BOARD_TYPE(system_rev) ==
AMBARELLA_BOARD_TYPE_VENDOR &&
AMBARELLA_BOARD_REV(system_rev) == 3)
continue;
ret = platform_device_register(ambarella_pwm_devices[i]);
if (ret)
continue;
device_set_wakeup_capable(&ambarella_pwm_devices[i]->dev, 1);
device_set_wakeup_enable(&ambarella_pwm_devices[i]->dev, 0);
}
spi_register_board_info(ambarella_spi_devices,
ARRAY_SIZE(ambarella_spi_devices));
platform_device_register(&elephant_board_input);
if (use_ambarella_rtc0)
platform_device_register(&ambarella_rtc0);
if (use_ambarella_wdt0)
platform_device_register(&ambarella_wdt0);
i2c_register_board_info(1, &ambarella_board_hdmi_info, 1);
}
/* ==========================================================================*/
MACHINE_START(ELEPHANT, "Elephant")
.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_elephant,
MACHINE_END