/*
 * arch/arm/mach-ambarella/init-dropcam-cr.c
 *
 * Copyright (C) 2013, Dropcam, 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 <linux/spi/spi.h>
#include <linux/spi/spidev.h>
#include <linux/i2c.h>
#include <linux/irq.h>
#include <linux/interrupt.h>
#include <linux/delay.h>
#include <linux/input.h>
#include <linux/pda_power.h>
#include <linux/syscalls.h>
#include <asm/uaccess.h>

#include <asm/mach-types.h>
#include <asm/mach/arch.h>

#include <plat/ambinput.h>

#include <mach/hardware.h>
#include <mach/init.h>
#include <mach/board.h>

#include "board-device.h"
#include <mach/init-dropcam.h>

/* ==========================================================================*/
static int ambarella_power_is_ac_online(void)
{
	return 1;
}

static struct pda_power_pdata  ambarella_power_supply_info = {
	.is_ac_online    = ambarella_power_is_ac_online,
};

static struct platform_device ambarella_power_supply = {
	.name = "pda-power",
	.id   = -1,
	.dev  = {
		.platform_data = &ambarella_power_supply_info,
	},
};

/* ==========================================================================*/
static struct platform_device *ambarella_devices[] __initdata = {
	&ambarella_adc0,
	&ambarella_crypto,
//	&ambarella_eth0,
	&ambarella_fb0,
	&ambarella_fb1,
	&ambarella_i2s0,
	&ambarella_pcm0,
	&ambarella_dummy_codec0,
	&ambarella_idc0,
	&ambarella_idc1,
	&ambarella_i2cmux,
//	&ambarella_ir0,
	&ambarella_sd0,
//	&ambarella_spi0,
//	&ambarella_spi1,
//	&ambarella_spi_slave,
	&ambarella_uart,
	&ambarella_uart1,
	&ambarella_udc0,
	&ambarella_wdt0,
	&ambarella_pwm_platform_device0,
	&ambarella_pwm_platform_device1,
	&ambarella_pwm_platform_device2,
	&ambarella_pwm_platform_device3,
	&ambarella_pwm_platform_device4,
	&ambarella_power_supply,
	&ambarella_fsg_device0,
	&ambarella_usb_device0,
};

/* ==========================================================================*/
static struct ambarella_key_table dropcam_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_GPIO_KEY,     {.gpio_key      = {KEY_CONFIG,   0, 1, GPIO(35), IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING}}},

  {AMBINPUT_END}
};

static struct ambarella_input_board_info dropcam_board_input_info = {
	.pkeymap		= dropcam_keymap,
	.pinput_dev		= NULL,
	.pdev			= NULL,

	.abx_max_x		= 4095,
	.abx_max_y		= 4095,
	.abx_max_pressure	= 4095,
	.abx_max_width		= 16,
};

static struct platform_device dropcam_board_input = {
	.name		= "ambarella-input",
	.id		= -1,
	.resource	= NULL,
	.num_resources	= 0,
	.dev		= {
		.platform_data		= &dropcam_board_input_info,
		.dma_mask		= &ambarella_dmamask,
		.coherent_dma_mask	= DMA_BIT_MASK(32),
	}
};

/* ==========================================================================*/

static  const int GPIO1_AFSEL_1       = 33;
static  const int GPIO1_AFSEL_2       = 34;

static  const int BT_HOST_WAKE_GPIO   = 91;
static  const int BT_RST_GPIO         = 42;
static  const int BT_RF_DISABLE_GPIO  = 40;
static  const int BT_WAKE_GPIO        = 4;

/* ==========================================================================*/
void init_dropcam_crown_royal(void)
{
	int					i;

	ambarella_init_machine("Dropcam");
	printk("Initializing Crown Royal Dropcam board (revision %d)\n", AMBARELLA_BOARD_REV(system_rev));

	/* Config Board */
	ambarella_board_generic.power_detect.irq_gpio = GPIO(11);
	ambarella_board_generic.power_detect.irq_line = gpio_to_irq(11);
	ambarella_board_generic.power_detect.irq_type = IRQF_TRIGGER_FALLING;
	ambarella_board_generic.power_detect.irq_gpio_val = GPIO_LOW;
	ambarella_board_generic.power_detect.irq_gpio_mode = GPIO_FUNC_SW_INPUT;

	/* Config SD */
	ambarella_platform_sd_controller0.max_clock = 25000000;
	fio_default_owner = SELECT_FIO_SDIO;
	ambarella_platform_sd_controller0.slot[0].cd_delay = 100;
	ambarella_platform_sd_controller0.slot[0].fixed_wp = 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].gpio_cd.irq_type = -1;
	ambarella_platform_sd_controller0.slot[0].gpio_cd.irq_gpio_val = GPIO_LOW;
	ambarella_platform_sd_controller0.slot[0].gpio_cd.irq_gpio_mode = GPIO_FUNC_SW_INPUT;

	ambarella_platform_sd_controller0.slot[1].cd_delay = 100;
	ambarella_platform_sd_controller0.slot[1].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].gpio_cd.irq_gpio_val = GPIO_LOW;
	ambarella_platform_sd_controller0.slot[1].gpio_cd.irq_gpio_mode = GPIO_FUNC_SW_INPUT;

	ambarella_board_generic.wifi_sd_bus = 0;
	ambarella_board_generic.wifi_sd_slot = 1;

	ambarella_board_generic.wifi_power.gpio_id = GPIO(6);
	ambarella_board_generic.wifi_power.active_level = GPIO_HIGH;
	ambarella_board_generic.wifi_power.active_delay = 100;

	ambarella_board_generic.vin0_power.gpio_id = GPIO(3);
	ambarella_board_generic.vin0_power.active_level = GPIO_HIGH;
	ambarella_board_generic.vin0_power.active_delay = 100;

	ambarella_board_generic.vin0_reset.gpio_id = GPIO(2);
	ambarella_board_generic.vin0_reset.active_level = GPIO_HIGH;
	ambarella_board_generic.vin0_reset.active_delay = 100;

	ambarella_board_generic.bt_reset.gpio_id = GPIO(42);
	ambarella_board_generic.bt_reset.active_level = GPIO_HIGH;
	ambarella_board_generic.bt_reset.active_delay = 100;

	ambarella_board_generic.bt_power.gpio_id = GPIO(40);
	ambarella_board_generic.bt_power.active_level = GPIO_HIGH;
	ambarella_board_generic.bt_power.active_delay = 100;

	/* At least some of these are probably temporarily set here. Just get these
	pins in a known state */

	/* Set GPIO1.AFSEL[1] to 1 and GPIO1.AFSEL[2] to enable UART1 and disable SSI_SLAVE
	(see 164 of A5s Programmers Manual) */
	ambarella_gpio_config(GPIO1_AFSEL_1, GPIO_FUNC_HW);
	ambarella_gpio_config(GPIO1_AFSEL_2, GPIO_FUNC_SW_OUTPUT);
	ambarella_gpio_set(GPIO1_AFSEL_2, 1);

	ambarella_gpio_config(BT_RST_GPIO, GPIO_FUNC_SW_OUTPUT);
	ambarella_gpio_set(BT_RST_GPIO, 1);

	ambarella_gpio_config(BT_RF_DISABLE_GPIO, GPIO_FUNC_SW_OUTPUT);
	ambarella_gpio_set(BT_RF_DISABLE_GPIO, 1);

	ambarella_gpio_config(BT_WAKE_GPIO, GPIO_FUNC_SW_OUTPUT);
	ambarella_gpio_set(BT_WAKE_GPIO, 1);

	ambarella_gpio_config(BT_HOST_WAKE_GPIO, GPIO_FUNC_SW_INPUT);

	/* Register devices */
	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);
	}

	ambarella_init_wm8974(0, 0x1A);

	i2c_register_board_info(0, ambarella_board_vin_infos, ARRAY_SIZE(ambarella_board_vin_infos));
	i2c_register_board_info(1, &ambarella_board_hdmi_info, 1);

	platform_device_register(&ambarella_rtc0);

	platform_device_register(&dropcam_board_input);
}
