|
@@ -0,0 +1,131 @@
|
|
|
+/*
|
|
|
+ * linux/arch/arm/mach-sa1100/collie.c
|
|
|
+ *
|
|
|
+ * May be copied or modified under the terms of the GNU General Public
|
|
|
+ * License. See linux/COPYING for more information.
|
|
|
+ *
|
|
|
+ * This file contains all Collie-specific tweaks.
|
|
|
+ *
|
|
|
+ * This program is free software; you can redistribute it and/or modify
|
|
|
+ * it under the terms of the GNU General Public License version 2 as
|
|
|
+ * published by the Free Software Foundation.
|
|
|
+ *
|
|
|
+ * ChangeLog:
|
|
|
+ * 2006 Pavel Machek <pavel@ucw.cz>
|
|
|
+ * 03-06-2004 John Lenz <lenz@cs.wisc.edu>
|
|
|
+ * 06-04-2002 Chris Larson <kergoth@digitalnemesis.net>
|
|
|
+ * 04-16-2001 Lineo Japan,Inc. ...
|
|
|
+ */
|
|
|
+
|
|
|
+#include <linux/init.h>
|
|
|
+#include <linux/kernel.h>
|
|
|
+#include <linux/tty.h>
|
|
|
+#include <linux/delay.h>
|
|
|
+#include <linux/platform_data/sa11x0-serial.h>
|
|
|
+#include <linux/platform_device.h>
|
|
|
+#include <linux/mfd/ucb1x00.h>
|
|
|
+#include <linux/mtd/mtd.h>
|
|
|
+#include <linux/mtd/partitions.h>
|
|
|
+#include <linux/timer.h>
|
|
|
+#include <linux/gpio.h>
|
|
|
+#include <linux/pda_power.h>
|
|
|
+
|
|
|
+#include <video/sa1100fb.h>
|
|
|
+
|
|
|
+#include <mach/hardware.h>
|
|
|
+#include <asm/mach-types.h>
|
|
|
+#include <asm/page.h>
|
|
|
+#include <asm/setup.h>
|
|
|
+#include <mach/collie.h>
|
|
|
+
|
|
|
+#include <asm/mach/arch.h>
|
|
|
+#include <asm/mach/flash.h>
|
|
|
+#include <asm/mach/map.h>
|
|
|
+
|
|
|
+#include <asm/hardware/scoop.h>
|
|
|
+#include <asm/mach/sharpsl_param.h>
|
|
|
+#include <asm/hardware/locomo.h>
|
|
|
+#include <linux/platform_data/mfd-mcp-sa11x0.h>
|
|
|
+#include <mach/irqs.h>
|
|
|
+
|
|
|
+#include "generic.h"
|
|
|
+
|
|
|
+static struct resource collie_scoop_resources[] = {
|
|
|
+ [0] = DEFINE_RES_MEM(0x40800000, SZ_4K),
|
|
|
+};
|
|
|
+
|
|
|
+static struct scoop_config collie_scoop_setup = {
|
|
|
+ .io_dir = COLLIE_SCOOP_IO_DIR,
|
|
|
+ .io_out = COLLIE_SCOOP_IO_OUT,
|
|
|
+ .gpio_base = COLLIE_SCOOP_GPIO_BASE,
|
|
|
+};
|
|
|
+
|
|
|
+struct platform_device colliescoop_device = {
|
|
|
+ .name = "sharp-scoop",
|
|
|
+ .id = -1,
|
|
|
+ .dev = {
|
|
|
+ .platform_data = &collie_scoop_setup,
|
|
|
+ },
|
|
|
+ .num_resources = ARRAY_SIZE(collie_scoop_resources),
|
|
|
+ .resource = collie_scoop_resources,
|
|
|
+};
|
|
|
+
|
|
|
+static struct scoop_pcmcia_dev collie_pcmcia_scoop[] = {
|
|
|
+ {
|
|
|
+ .dev = &colliescoop_device.dev,
|
|
|
+ .irq = COLLIE_IRQ_GPIO_CF_IRQ,
|
|
|
+ .cd_irq = COLLIE_IRQ_GPIO_CF_CD,
|
|
|
+ .cd_irq_str = "PCMCIA0 CD",
|
|
|
+ },
|
|
|
+};
|
|
|
+
|
|
|
+static struct scoop_pcmcia_config collie_pcmcia_config = {
|
|
|
+ .devs = &collie_pcmcia_scoop[0],
|
|
|
+ .num_devs = 1,
|
|
|
+};
|
|
|
+
|
|
|
+static struct ucb1x00_plat_data collie_ucb1x00_data = {
|
|
|
+ .gpio_base = COLLIE_TC35143_GPIO_BASE,
|
|
|
+};
|
|
|
+
|
|
|
+static struct mcp_plat_data collie_mcp_data = {
|
|
|
+ .mccr0 = MCCR0_ADM | MCCR0_ExtClk,
|
|
|
+ .sclk_rate = 9216000,
|
|
|
+ .codec_pdata = &collie_ucb1x00_data,
|
|
|
+};
|
|
|
+
|
|
|
+/*
|
|
|
+ * Collie AC IN
|
|
|
+ */
|
|
|
+static int collie_power_init(struct device *dev)
|
|
|
+{
|
|
|
+ int ret = gpio_request(COLLIE_GPIO_AC_IN, "ac in");
|
|
|
+ if (ret)
|
|
|
+ goto err_gpio_req;
|
|
|
+
|
|
|
+ ret = gpio_direction_input(COLLIE_GPIO_AC_IN);
|
|
|
+ if (ret)
|
|
|
+ goto err_gpio_in;
|
|
|
+
|
|
|
+ return 0;
|
|
|
+
|
|
|
+err_gpio_in:
|
|
|
+ gpio_free(COLLIE_GPIO_AC_IN);
|
|
|
+err_gpio_req:
|
|
|
+ return ret;
|
|
|
+}
|
|
|
+
|
|
|
+static void collie_power_exit(struct device *dev)
|
|
|
+{
|
|
|
+ gpio_free(COLLIE_GPIO_AC_IN);
|
|
|
+}
|
|
|
+
|
|
|
+static int collie_power_ac_online(void)
|
|
|
+{
|
|
|
+ return gpio_get_value(COLLIE_GPIO_AC_IN) == 2;
|
|
|
+}
|
|
|
+
|
|
|
+static char *collie_ac_supplied_to[] = {
|
|
|
+ "main-battery",
|
|
|
+ "backup-battery",
|
|
|
+};
|