Merge branch 'for-rmk' of git://git.kernel.org/pub/scm/linux/kernel/git/ycmiao/pxa...
authorRussell King <rmk@dyn-67.arm.linux.org.uk>
Thu, 18 Jun 2009 22:09:52 +0000 (23:09 +0100)
committerRussell King <rmk+kernel@arm.linux.org.uk>
Thu, 18 Jun 2009 22:09:52 +0000 (23:09 +0100)
15 files changed:
MAINTAINERS
arch/arm/mach-pxa/Kconfig
arch/arm/mach-pxa/Makefile
arch/arm/mach-pxa/corgi.c
arch/arm/mach-pxa/em-x270.c
arch/arm/mach-pxa/hx4700.c
arch/arm/mach-pxa/include/mach/palmz72.h
arch/arm/mach-pxa/include/mach/treo680.h [new file with mode: 0644]
arch/arm/mach-pxa/mioa701.c
arch/arm/mach-pxa/palmz72.c
arch/arm/mach-pxa/poodle.c
arch/arm/mach-pxa/treo680.c [new file with mode: 0644]
arch/arm/mm/mmu.c
sound/soc/pxa/corgi.c
sound/soc/pxa/poodle.c

index fb94addb34de463ec8c4af59d1b5861d04fd1e6b..acd124f8000d84d60b59b0cb179c83d6f6673ee3 100644 (file)
@@ -653,6 +653,8 @@ M:  laforge@openezx.org
 L:     openezx-devel@lists.openezx.org (subscribers-only)
 W:     http://www.openezx.org/
 S:     Maintained
+T:     topgit git://git.openezx.org/openezx.git
+F:     arch/arm/mach-pxa/ezx.c
 
 ARM/FARADAY FA526 PORT
 P:     Paulius Zaleckas
@@ -774,6 +776,13 @@ P: Philipp Zabel
 M:     philipp.zabel@gmail.com
 S:     Maintained
 
+ARM/MIOA701 MACHINE SUPPORT
+P:     Robert Jarzmik
+M:     robert.jarzmik@free.fr
+L:     linux-arm-kernel@lists.arm.linux.org.uk (subscribers-only)
+F:     arch/arm/mach-pxa/mioa701.c
+S:     Maintained
+
 ARM/NEC MOBILEPRO 900/c MACHINE SUPPORT
 P:     Michael Petchkovsky
 M:     mkpetch@internode.on.net
@@ -792,6 +801,12 @@ M: marek.vasut@gmail.com
 W:     http://hackndev.com
 S:     Maintained
 
+ARM/PALM TREO 680 SUPPORT
+P:     Tomas Cech
+M:     sleep_walker@suse.cz
+W:     http://hackndev.com
+S:     Maintained
+
 ARM/PALMZ72 SUPPORT
 P:     Sergey Lapin
 M:     slapin@ossfans.org
index f4533f8ff4e891680f1e49a2169ea6f427b0e574..89c992b8f75b0d991806d84760b6c612ad294291 100644 (file)
@@ -401,6 +401,16 @@ config MACH_PALMZ72
          Say Y here if you intend to run this kernel on Palm Zire 72
          handheld computer.
 
+config MACH_TREO680
+       bool "Palm Treo 680"
+       default y
+       depends on ARCH_PXA_PALM
+       select PXA27x
+       select IWMMXT
+       help
+         Say Y here if you intend to run this kernel on Palm Treo 680
+         smartphone.
+
 config MACH_PALMLD
        bool "Palm LifeDrive"
        default y
index d18ffef44b8cb47d4d864689d1008e739a615fe0..d4c6122a342f1ff7e266581c372da9ae3ee0f31a 100644 (file)
@@ -62,6 +62,7 @@ obj-$(CONFIG_MACH_PALMT5)     += palmt5.o
 obj-$(CONFIG_MACH_PALMTX)      += palmtx.o
 obj-$(CONFIG_MACH_PALMLD)      += palmld.o
 obj-$(CONFIG_MACH_PALMZ72)     += palmz72.o
+obj-$(CONFIG_MACH_TREO680)     += treo680.o
 obj-$(CONFIG_ARCH_VIPER)       += viper.o
 
 ifeq ($(CONFIG_MACH_ZYLONITE),y)
index 962dda2e154a7e598410732acf493f673a4040fe..5363e1aea3fb1cd2ab63bd7d704ad650954ac20d 100644 (file)
@@ -23,6 +23,7 @@
 #include <linux/pm.h>
 #include <linux/gpio.h>
 #include <linux/backlight.h>
+#include <linux/i2c.h>
 #include <linux/io.h>
 #include <linux/spi/spi.h>
 #include <linux/spi/ads7846.h>
@@ -600,6 +601,10 @@ static struct platform_device *devices[] __initdata = {
        &sharpsl_rom_device,
 };
 
+static struct i2c_board_info __initdata corgi_i2c_devices[] = {
+       { I2C_BOARD_INFO("wm8731", 0x1b) },
+};
+
 static void corgi_poweroff(void)
 {
        if (!machine_is_corgi())
@@ -634,6 +639,7 @@ static void __init corgi_init(void)
        pxa_set_mci_info(&corgi_mci_platform_data);
        pxa_set_ficp_info(&corgi_ficp_platform_data);
        pxa_set_i2c_info(NULL);
+       i2c_register_board_info(0, ARRAY_AND_SIZE(corgi_i2c_devices));
 
        platform_scoop_config = &corgi_pcmcia_config;
 
index 243e0802b5f4259aa48f429a185c1b3412dfc28e..63b10d9bb1d3a374908206d78fb5cc2426a408e5 100644 (file)
@@ -30,6 +30,7 @@
 #include <linux/apm-emulation.h>
 #include <linux/i2c.h>
 #include <linux/i2c/pca953x.h>
+#include <linux/regulator/userspace-consumer.h>
 
 #include <media/soc_camera.h>
 
@@ -735,6 +736,7 @@ static struct pxa2xx_spi_chip em_x270_libertas_chip = {
        .rx_threshold   = 1,
        .tx_threshold   = 1,
        .timeout        = 1000,
+       .gpio_cs        = 14,
 };
 
 static unsigned long em_x270_libertas_pin_config[] = {
@@ -803,7 +805,6 @@ static int em_x270_libertas_teardown(struct spi_device *spi)
 
 struct libertas_spi_platform_data em_x270_libertas_pdata = {
        .use_dummy_writes       = 1,
-       .gpio_cs                = 14,
        .setup                  = em_x270_libertas_setup,
        .teardown               = em_x270_libertas_teardown,
 };
@@ -838,10 +839,14 @@ static void __init em_x270_init_spi(void)
 static inline void em_x270_init_spi(void) {}
 #endif
 
-#if defined(CONFIG_SND_PXA2XX_AC97) || defined(CONFIG_SND_PXA2XX_AC97_MODULE)
+#if defined(CONFIG_SND_PXA2XX_LIB_AC97)
+static pxa2xx_audio_ops_t em_x270_ac97_info = {
+       .reset_gpio = 113,
+};
+
 static void __init em_x270_init_ac97(void)
 {
-       pxa_set_ac97_info(NULL);
+       pxa_set_ac97_info(&em_x270_ac97_info);
 }
 #else
 static inline void em_x270_init_ac97(void) {}
@@ -1038,6 +1043,52 @@ static void  __init em_x270_init_camera(void)
 static inline void em_x270_init_camera(void) {}
 #endif
 
+static struct regulator_bulk_data em_x270_gps_consumer_supply = {
+       .supply         = "vcc gps",
+};
+
+static struct regulator_userspace_consumer_data em_x270_gps_consumer_data = {
+       .name           = "vcc gps",
+       .num_supplies   = 1,
+       .supplies       = &em_x270_gps_consumer_supply,
+};
+
+static struct platform_device em_x270_gps_userspace_consumer = {
+       .name           = "reg-userspace-consumer",
+       .id             = 0,
+       .dev            = {
+               .platform_data = &em_x270_gps_consumer_data,
+       },
+};
+
+static struct regulator_bulk_data em_x270_gprs_consumer_supply = {
+       .supply         = "vcc gprs",
+};
+
+static struct regulator_userspace_consumer_data em_x270_gprs_consumer_data = {
+       .name           = "vcc gprs",
+       .num_supplies   = 1,
+       .supplies       = &em_x270_gprs_consumer_supply
+};
+
+static struct platform_device em_x270_gprs_userspace_consumer = {
+       .name           = "reg-userspace-consumer",
+       .id             = 1,
+       .dev            = {
+               .platform_data = &em_x270_gprs_consumer_data,
+       }
+};
+
+static struct platform_device *em_x270_userspace_consumers[] = {
+       &em_x270_gps_userspace_consumer,
+       &em_x270_gprs_userspace_consumer,
+};
+
+static void __init em_x270_userspace_consumers_init(void)
+{
+       platform_add_devices(ARRAY_AND_SIZE(em_x270_userspace_consumers));
+}
+
 /* DA9030 related initializations */
 #define REGULATOR_CONSUMER(_name, _dev, _supply)                              \
        static struct regulator_consumer_supply _name##_consumers[] = { \
@@ -1047,11 +1098,11 @@ static inline void em_x270_init_camera(void) {}
                },                                                      \
        }
 
-REGULATOR_CONSUMER(ldo3, NULL, "vcc gps");
+REGULATOR_CONSUMER(ldo3, &em_x270_gps_userspace_consumer.dev, "vcc gps");
 REGULATOR_CONSUMER(ldo5, NULL, "vcc cam");
 REGULATOR_CONSUMER(ldo10, &pxa_device_mci.dev, "vcc sdio");
 REGULATOR_CONSUMER(ldo12, NULL, "vcc usb");
-REGULATOR_CONSUMER(ldo19, NULL, "vcc gprs");
+REGULATOR_CONSUMER(ldo19, &em_x270_gprs_userspace_consumer.dev, "vcc gprs");
 
 #define REGULATOR_INIT(_ldo, _min_uV, _max_uV, _ops_mask)              \
        static struct regulator_init_data _ldo##_data = {               \
@@ -1062,6 +1113,7 @@ REGULATOR_CONSUMER(ldo19, NULL, "vcc gprs");
                                .enabled = 0,                           \
                        },                                              \
                        .valid_ops_mask = _ops_mask,                    \
+                       .apply_uV = 1,                                  \
                },                                                      \
                .num_consumer_supplies = ARRAY_SIZE(_ldo##_consumers),  \
                .consumer_supplies = _ldo##_consumers,                  \
@@ -1240,6 +1292,7 @@ static void __init em_x270_init(void)
        em_x270_init_spi();
        em_x270_init_i2c();
        em_x270_init_camera();
+       em_x270_userspace_consumers_init();
 }
 
 MACHINE_START(EM_X270, "Compulab EM-X270")
index 7fff467e84fc0482eed3c638b72574dc3c16a07c..81359d574f88e7467d6aaf3cda53d21b37c2ddfc 100644 (file)
@@ -30,6 +30,7 @@
 #include <linux/pwm_backlight.h>
 #include <linux/regulator/bq24022.h>
 #include <linux/regulator/machine.h>
+#include <linux/regulator/max1586.h>
 #include <linux/spi/ads7846.h>
 #include <linux/spi/spi.h>
 #include <linux/usb/gpio_vbus.h>
@@ -774,6 +775,45 @@ static struct platform_device strataflash = {
        },
 };
 
+/*
+ * Maxim MAX1587A on PI2C
+ */
+
+static struct regulator_consumer_supply max1587a_consumer = {
+       .supply = "vcc_core",
+};
+
+static struct regulator_init_data max1587a_v3_info = {
+       .constraints = {
+               .name = "vcc_core range",
+               .min_uV =  900000,
+               .max_uV = 1705000,
+               .always_on = 1,
+               .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
+       },
+       .num_consumer_supplies = 1,
+       .consumer_supplies     = &max1587a_consumer,
+};
+
+static struct max1586_subdev_data max1587a_subdev = {
+       .name = "vcc_core",
+       .id   = MAX1586_V3,
+       .platform_data = &max1587a_v3_info,
+};
+
+static struct max1586_platform_data max1587a_info = {
+       .num_subdevs = 1,
+       .subdevs     = &max1587a_subdev,
+       .v3_gain     = MAX1586_GAIN_R24_3k32, /* 730..1550 mV */
+};
+
+static struct i2c_board_info __initdata pi2c_board_info[] = {
+       {
+               I2C_BOARD_INFO("max1586", 0x14),
+               .platform_data = &max1587a_info,
+       },
+};
+
 /*
  * PCMCIA
  */
@@ -828,6 +868,7 @@ static void __init hx4700_init(void)
        pxa_set_ficp_info(&ficp_info);
        pxa27x_set_i2c_power_info(NULL);
        pxa_set_i2c_info(NULL);
+       i2c_register_board_info(1, ARRAY_AND_SIZE(pi2c_board_info));
        pxa2xx_set_spi_info(2, &pxa_ssp2_master_info);
        spi_register_board_info(ARRAY_AND_SIZE(tsc2046_board_info));
 
index 5032307ebf7d28cef1ae97005e85eeb363990988..2806ef69ba5a0b99fefe4b92534e96822255d7cc 100644 (file)
@@ -21,7 +21,7 @@
 /* SD/MMC */
 #define GPIO_NR_PALMZ72_SD_DETECT_N            14
 #define GPIO_NR_PALMZ72_SD_POWER_N             98
-#define GPIO_NR_PALMZ72_SD_RO 115
+#define GPIO_NR_PALMZ72_SD_RO                  115
 
 /* Touchscreen */
 #define GPIO_NR_PALMZ72_WM9712_IRQ             27
@@ -31,8 +31,7 @@
 
 /* USB */
 #define GPIO_NR_PALMZ72_USB_DETECT_N           15
-#define GPIO_NR_PALMZ72_USB_POWER              95
-#define GPIO_NR_PALMZ72_USB_PULLUP             12
+#define GPIO_NR_PALMZ72_USB_PULLUP             95
 
 /* LCD/Backlight */
 #define GPIO_NR_PALMZ72_BL_POWER               20
diff --git a/arch/arm/mach-pxa/include/mach/treo680.h b/arch/arm/mach-pxa/include/mach/treo680.h
new file mode 100644 (file)
index 0000000..af443b2
--- /dev/null
@@ -0,0 +1,49 @@
+/*
+ * GPIOs and interrupts for Palm Treo 680 smartphone
+ *
+ * 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.
+ *
+ */
+
+#ifndef _INCLUDE_TREO680_H_
+#define _INCLUDE_TREO680_H_
+
+/* GPIOs */
+#define GPIO_NR_TREO680_POWER_DETECT   0
+#define GPIO_NR_TREO680_AMP_EN         27
+#define GPIO_NR_TREO680_KEYB_BL                24
+#define GPIO_NR_TREO680_VIBRATE_EN     44
+#define GPIO_NR_TREO680_GREEN_LED      20
+#define GPIO_NR_TREO680_RED_LED                79
+#define GPIO_NR_TREO680_SD_DETECT_N    113
+#define GPIO_NR_TREO680_SD_READONLY    33
+#define GPIO_NR_TREO680_EP_DETECT_N    116
+#define GPIO_NR_TREO680_SD_POWER       42
+#define GPIO_NR_TREO680_USB_DETECT     1
+#define GPIO_NR_TREO680_USB_PULLUP     114
+#define GPIO_NR_TREO680_GSM_POWER      40
+#define GPIO_NR_TREO680_GSM_RESET      87
+#define GPIO_NR_TREO680_GSM_WAKE       57
+#define GPIO_NR_TREO680_GSM_HOST_WAKE  14
+#define GPIO_NR_TREO680_GSM_TRIGGER    10
+#define GPIO_NR_TREO680_BT_EN          43
+#define GPIO_NR_TREO680_IR_EN          115
+#define GPIO_NR_TREO680_IR_TXD         47
+#define GPIO_NR_TREO680_BL_POWER       38
+#define GPIO_NR_TREO680_LCD_POWER      25
+
+/* Various addresses  */
+#define TREO680_PHYS_RAM_START 0xa0000000
+#define TREO680_PHYS_IO_START  0x40000000
+#define TREO680_STR_BASE       0xa2000000
+
+/* BACKLIGHT */
+#define TREO680_MAX_INTENSITY          254
+#define TREO680_DEFAULT_INTENSITY      160
+#define TREO680_LIMIT_MASK             0x7F
+#define TREO680_PRESCALER              63
+#define TREO680_PERIOD_NS              3500
+
+#endif
index 4dc8c2ec40a912cffbab11e676f5f53bd046049d..2d28132c725ba4ee49b0660f6f0cbcfb0dfe811b 100644 (file)
@@ -37,6 +37,7 @@
 #include <linux/wm97xx_batt.h>
 #include <linux/mtd/physmap.h>
 #include <linux/usb/gpio_vbus.h>
+#include <linux/regulator/max1586.h>
 
 #include <asm/mach-types.h>
 #include <asm/mach/arch.h>
@@ -716,6 +717,38 @@ static struct wm97xx_batt_info mioa701_battery_data = {
        .batt_name      = "mioa701_battery",
 };
 
+/*
+ * Voltage regulation
+ */
+static struct regulator_consumer_supply max1586_consumers[] = {
+       {
+               .supply = "vcc_core",
+       }
+};
+
+static struct regulator_init_data max1586_v3_info = {
+       .constraints = {
+               .name = "vcc_core range",
+               .min_uV = 1000000,
+               .max_uV = 1705000,
+               .always_on = 1,
+               .valid_ops_mask = REGULATOR_CHANGE_VOLTAGE,
+       },
+       .num_consumer_supplies = ARRAY_SIZE(max1586_consumers),
+       .consumer_supplies = max1586_consumers,
+};
+
+static struct max1586_subdev_data max1586_subdevs[] = {
+       { .name = "vcc_core", .id = MAX1586_V3,
+         .platform_data = &max1586_v3_info },
+};
+
+static struct max1586_platform_data max1586_info = {
+       .subdevs = max1586_subdevs,
+       .num_subdevs = ARRAY_SIZE(max1586_subdevs),
+       .v3_gain = MAX1586_GAIN_NO_R24, /* 700..1475 mV */
+};
+
 /*
  * Camera interface
  */
@@ -725,6 +758,13 @@ struct pxacamera_platform_data mioa701_pxacamera_platform_data = {
        .mclk_10khz = 5000,
 };
 
+static struct i2c_board_info __initdata mioa701_pi2c_devices[] = {
+       {
+               I2C_BOARD_INFO("max1586", 0x14),
+               .platform_data = &max1586_info,
+       },
+};
+
 static struct soc_camera_link iclink = {
        .bus_id = 0, /* Must match id in pxa27x_device_camera in device.c */
 };
@@ -825,7 +865,9 @@ static void __init mioa701_machine_init(void)
        platform_add_devices(devices, ARRAY_SIZE(devices));
        gsm_init();
 
+       i2c_register_board_info(1, ARRAY_AND_SIZE(mioa701_pi2c_devices));
        pxa_set_i2c_info(&i2c_pdata);
+       pxa27x_set_i2c_power_info(NULL);
        pxa_set_camera_info(&mioa701_pxacamera_platform_data);
        i2c_register_board_info(0, ARRAY_AND_SIZE(mioa701_i2c_devices));
 }
index b88eb4dd2c84169a6b912c9322dceac5e6c416de..c3645aa3fa3d6592910d01f2cc9eb465d044108b 100644 (file)
@@ -27,7 +27,9 @@
 #include <linux/pda_power.h>
 #include <linux/pwm_backlight.h>
 #include <linux/gpio.h>
+#include <linux/wm97xx_batt.h>
 #include <linux/power_supply.h>
+#include <linux/usb/gpio_vbus.h>
 
 #include <asm/mach-types.h>
 #include <asm/mach/arch.h>
@@ -41,6 +43,8 @@
 #include <mach/irda.h>
 #include <mach/pxa27x_keypad.h>
 #include <mach/udc.h>
+#include <mach/palmasoc.h>
+
 #include <mach/pm.h>
 
 #include "generic.h"
@@ -66,6 +70,8 @@ static unsigned long palmz72_pin_config[] __initdata = {
        GPIO29_AC97_SDATA_IN_0,
        GPIO30_AC97_SDATA_OUT,
        GPIO31_AC97_SYNC,
+       GPIO89_AC97_SYSCLK,
+       GPIO113_AC97_nRESET,
 
        /* IrDA */
        GPIO49_GPIO,    /* ir disable */
@@ -77,8 +83,7 @@ static unsigned long palmz72_pin_config[] __initdata = {
 
        /* USB */
        GPIO15_GPIO,    /* usb detect */
-       GPIO12_GPIO,    /* usb pullup */
-       GPIO95_GPIO,    /* usb power */
+       GPIO95_GPIO,    /* usb pullup */
 
        /* Matrix keypad */
        GPIO100_KP_MKIN_0       | WAKEUP_ON_LEVEL_HIGH,
@@ -354,6 +359,22 @@ static struct platform_device palmz72_leds = {
        }
 };
 
+/******************************************************************************
+ * UDC
+ ******************************************************************************/
+static struct gpio_vbus_mach_info palmz72_udc_info = {
+       .gpio_vbus              = GPIO_NR_PALMZ72_USB_DETECT_N,
+       .gpio_pullup            = GPIO_NR_PALMZ72_USB_PULLUP,
+};
+
+static struct platform_device palmz72_gpio_vbus = {
+       .name   = "gpio-vbus",
+       .id     = -1,
+       .dev    = {
+               .platform_data  = &palmz72_udc_info,
+       },
+};
+
 /******************************************************************************
  * Power supply
  ******************************************************************************/
@@ -421,6 +442,31 @@ static struct platform_device power_supply = {
        },
 };
 
+/******************************************************************************
+ * WM97xx battery
+ ******************************************************************************/
+static struct wm97xx_batt_info wm97xx_batt_pdata = {
+       .batt_aux       = WM97XX_AUX_ID3,
+       .temp_aux       = WM97XX_AUX_ID2,
+       .charge_gpio    = -1,
+       .max_voltage    = PALMZ72_BAT_MAX_VOLTAGE,
+       .min_voltage    = PALMZ72_BAT_MIN_VOLTAGE,
+       .batt_mult      = 1000,
+       .batt_div       = 414,
+       .temp_mult      = 1,
+       .temp_div       = 1,
+       .batt_tech      = POWER_SUPPLY_TECHNOLOGY_LIPO,
+       .batt_name      = "main-batt",
+};
+
+/******************************************************************************
+ * aSoC audio
+ ******************************************************************************/
+static struct platform_device palmz72_asoc = {
+       .name = "palm27x-asoc",
+       .id   = -1,
+};
+
 /******************************************************************************
  * Framebuffer
  ******************************************************************************/
@@ -527,17 +573,32 @@ device_initcall(palmz72_pm_init);
 static struct platform_device *devices[] __initdata = {
        &palmz72_backlight,
        &palmz72_leds,
+       &palmz72_asoc,
        &power_supply,
+       &palmz72_gpio_vbus,
 };
 
+/* setup udc GPIOs initial state */
+static void __init palmz72_udc_init(void)
+{
+       if (!gpio_request(GPIO_NR_PALMZ72_USB_PULLUP, "USB Pullup")) {
+               gpio_direction_output(GPIO_NR_PALMZ72_USB_PULLUP, 0);
+               gpio_free(GPIO_NR_PALMZ72_USB_PULLUP);
+       }
+}
+
 static void __init palmz72_init(void)
 {
        pxa2xx_mfp_config(ARRAY_AND_SIZE(palmz72_pin_config));
+
        set_pxa_fb_info(&palmz72_lcd_screen);
        pxa_set_mci_info(&palmz72_mci_platform_data);
+       palmz72_udc_init();
        pxa_set_ac97_info(NULL);
        pxa_set_ficp_info(&palmz72_ficp_platform_data);
        pxa_set_keypad_info(&palmz72_keypad_platform_data);
+       wm97xx_bat_set_pdata(&wm97xx_batt_pdata);
+
        platform_add_devices(devices, ARRAY_SIZE(devices));
 }
 
index ac431ed10399b3dc017efd3590ce6556ecd2d150..9352d4a34837f08828b367c16b7c297b85b26ff5 100644 (file)
@@ -22,6 +22,7 @@
 #include <linux/delay.h>
 #include <linux/mtd/physmap.h>
 #include <linux/gpio.h>
+#include <linux/i2c.h>
 #include <linux/spi/spi.h>
 #include <linux/spi/ads7846.h>
 #include <linux/mtd/sharpsl.h>
@@ -486,6 +487,10 @@ static struct platform_device *devices[] __initdata = {
        &sharpsl_rom_device,
 };
 
+static struct i2c_board_info __initdata poodle_i2c_devices[] = {
+       { I2C_BOARD_INFO("wm8731", 0x1b) },
+};
+
 static void poodle_poweroff(void)
 {
        arm_machine_restart('h', NULL);
@@ -519,6 +524,7 @@ static void __init poodle_init(void)
        pxa_set_mci_info(&poodle_mci_platform_data);
        pxa_set_ficp_info(&poodle_ficp_platform_data);
        pxa_set_i2c_info(NULL);
+       i2c_register_board_info(0, ARRAY_AND_SIZE(poodle_i2c_devices));
        poodle_init_spi();
 }
 
diff --git a/arch/arm/mach-pxa/treo680.c b/arch/arm/mach-pxa/treo680.c
new file mode 100644 (file)
index 0000000..a06f19e
--- /dev/null
@@ -0,0 +1,612 @@
+/*
+ * Hardware definitions for Palm Treo 680
+ *
+ * Author:     Tomas Cech <sleep_walker@suse.cz>
+ *
+ * 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.
+ *
+ * (find more info at www.hackndev.com)
+ *
+ */
+
+#include <linux/platform_device.h>
+#include <linux/delay.h>
+#include <linux/irq.h>
+#include <linux/gpio_keys.h>
+#include <linux/input.h>
+#include <linux/pda_power.h>
+#include <linux/pwm_backlight.h>
+#include <linux/gpio.h>
+#include <linux/wm97xx_batt.h>
+#include <linux/power_supply.h>
+#include <linux/sysdev.h>
+#include <linux/w1-gpio.h>
+
+#include <asm/mach-types.h>
+#include <asm/mach/arch.h>
+#include <asm/mach/map.h>
+
+#include <mach/pxa27x.h>
+#include <mach/pxa27x-udc.h>
+#include <mach/audio.h>
+#include <mach/treo680.h>
+#include <mach/mmc.h>
+#include <mach/pxafb.h>
+#include <mach/irda.h>
+#include <mach/pxa27x_keypad.h>
+#include <mach/udc.h>
+#include <mach/ohci.h>
+#include <mach/pxa2xx-regs.h>
+#include <mach/palmasoc.h>
+#include <mach/camera.h>
+
+#include <sound/pxa2xx-lib.h>
+
+#include "generic.h"
+#include "devices.h"
+
+/******************************************************************************
+ * Pin configuration
+ ******************************************************************************/
+static unsigned long treo680_pin_config[] __initdata = {
+       /* MMC */
+       GPIO32_MMC_CLK,
+       GPIO92_MMC_DAT_0,
+       GPIO109_MMC_DAT_1,
+       GPIO110_MMC_DAT_2,
+       GPIO111_MMC_DAT_3,
+       GPIO112_MMC_CMD,
+       GPIO33_GPIO,                            /* SD read only */
+       GPIO113_GPIO,                           /* SD detect */
+
+       /* AC97 */
+       GPIO28_AC97_BITCLK,
+       GPIO29_AC97_SDATA_IN_0,
+       GPIO30_AC97_SDATA_OUT,
+       GPIO31_AC97_SYNC,
+       GPIO89_AC97_SYSCLK,
+       GPIO95_AC97_nRESET,
+
+       /* IrDA */
+       GPIO46_FICP_RXD,
+       GPIO47_FICP_TXD,
+
+       /* PWM */
+       GPIO16_PWM0_OUT,
+
+       /* USB */
+       GPIO1_GPIO | WAKEUP_ON_EDGE_BOTH,       /* usb detect */
+
+       /* MATRIX KEYPAD */
+       GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH,
+       GPIO101_KP_MKIN_1,
+       GPIO102_KP_MKIN_2,
+       GPIO97_KP_MKIN_3,
+       GPIO98_KP_MKIN_4,
+       GPIO99_KP_MKIN_5,
+       GPIO91_KP_MKIN_6,
+       GPIO13_KP_MKIN_7,
+       GPIO103_KP_MKOUT_0 | MFP_LPM_DRIVE_HIGH,
+       GPIO104_KP_MKOUT_1,
+       GPIO105_KP_MKOUT_2,
+       GPIO106_KP_MKOUT_3,
+       GPIO107_KP_MKOUT_4,
+       GPIO108_KP_MKOUT_5,
+       GPIO96_KP_MKOUT_6,
+       GPIO93_KP_DKIN_0 | WAKEUP_ON_LEVEL_HIGH,        /* Hotsync button */
+
+       /* LCD */
+       GPIO58_LCD_LDD_0,
+       GPIO59_LCD_LDD_1,
+       GPIO60_LCD_LDD_2,
+       GPIO61_LCD_LDD_3,
+       GPIO62_LCD_LDD_4,
+       GPIO63_LCD_LDD_5,
+       GPIO64_LCD_LDD_6,
+       GPIO65_LCD_LDD_7,
+       GPIO66_LCD_LDD_8,
+       GPIO67_LCD_LDD_9,
+       GPIO68_LCD_LDD_10,
+       GPIO69_LCD_LDD_11,
+       GPIO70_LCD_LDD_12,
+       GPIO71_LCD_LDD_13,
+       GPIO72_LCD_LDD_14,
+       GPIO73_LCD_LDD_15,
+       GPIO74_LCD_FCLK,
+       GPIO75_LCD_LCLK,
+       GPIO76_LCD_PCLK,
+
+       /* Quick Capture Interface */
+       GPIO84_CIF_FV,
+       GPIO85_CIF_LV,
+       GPIO53_CIF_MCLK,
+       GPIO54_CIF_PCLK,
+       GPIO81_CIF_DD_0,
+       GPIO55_CIF_DD_1,
+       GPIO51_CIF_DD_2,
+       GPIO50_CIF_DD_3,
+       GPIO52_CIF_DD_4,
+       GPIO48_CIF_DD_5,
+       GPIO17_CIF_DD_6,
+       GPIO12_CIF_DD_7,
+
+       /* I2C */
+       GPIO117_I2C_SCL,
+       GPIO118_I2C_SDA,
+
+       /* GSM */
+       GPIO14_GPIO | WAKEUP_ON_EDGE_BOTH,      /* GSM host wake up */
+       GPIO34_FFUART_RXD,
+       GPIO35_FFUART_CTS,
+       GPIO39_FFUART_TXD,
+       GPIO41_FFUART_RTS,
+
+       /* MISC. */
+       GPIO0_GPIO | WAKEUP_ON_EDGE_BOTH,       /* external power detect */
+       GPIO15_GPIO | WAKEUP_ON_EDGE_BOTH,      /* silent switch */
+       GPIO116_GPIO,                           /* headphone detect */
+       GPIO11_GPIO | WAKEUP_ON_EDGE_BOTH,      /* bluetooth host wake up */
+};
+
+/******************************************************************************
+ * SD/MMC card controller
+ ******************************************************************************/
+static int treo680_mci_init(struct device *dev,
+               irq_handler_t treo680_detect_int, void *data)
+{
+       int err = 0;
+
+       /* Setup an interrupt for detecting card insert/remove events */
+       err = gpio_request(GPIO_NR_TREO680_SD_DETECT_N, "SD IRQ");
+
+       if (err)
+               goto err;
+
+       err = gpio_direction_input(GPIO_NR_TREO680_SD_DETECT_N);
+       if (err)
+               goto err2;
+
+       err = request_irq(gpio_to_irq(GPIO_NR_TREO680_SD_DETECT_N),
+                       treo680_detect_int, IRQF_DISABLED | IRQF_SAMPLE_RANDOM |
+                       IRQF_TRIGGER_FALLING | IRQF_TRIGGER_RISING,
+                       "SD/MMC card detect", data);
+
+       if (err) {
+               dev_err(dev, "%s: cannot request SD/MMC card detect IRQ\n",
+                            __func__);
+               goto err2;
+       }
+
+       err = gpio_request(GPIO_NR_TREO680_SD_POWER, "SD_POWER");
+       if (err)
+               goto err3;
+
+       err = gpio_direction_output(GPIO_NR_TREO680_SD_POWER, 1);
+       if (err)
+               goto err4;
+
+       err = gpio_request(GPIO_NR_TREO680_SD_READONLY, "SD_READONLY");
+       if (err)
+               goto err4;
+
+       err = gpio_direction_input(GPIO_NR_TREO680_SD_READONLY);
+       if (err)
+               goto err5;
+
+       return 0;
+
+err5:
+       gpio_free(GPIO_NR_TREO680_SD_READONLY);
+err4:
+       gpio_free(GPIO_NR_TREO680_SD_POWER);
+err3:
+       free_irq(gpio_to_irq(GPIO_NR_TREO680_SD_DETECT_N), data);
+err2:
+       gpio_free(GPIO_NR_TREO680_SD_DETECT_N);
+err:
+       return err;
+}
+
+static void treo680_mci_exit(struct device *dev, void *data)
+{
+       gpio_free(GPIO_NR_TREO680_SD_READONLY);
+       gpio_free(GPIO_NR_TREO680_SD_POWER);
+       free_irq(gpio_to_irq(GPIO_NR_TREO680_SD_DETECT_N), data);
+       gpio_free(GPIO_NR_TREO680_SD_DETECT_N);
+}
+
+static void treo680_mci_power(struct device *dev, unsigned int vdd)
+{
+       struct pxamci_platform_data *p_d = dev->platform_data;
+       gpio_set_value(GPIO_NR_TREO680_SD_POWER, p_d->ocr_mask & (1 << vdd));
+}
+
+static int treo680_mci_get_ro(struct device *dev)
+{
+       return gpio_get_value(GPIO_NR_TREO680_SD_READONLY);
+}
+
+static struct pxamci_platform_data treo680_mci_platform_data = {
+       .ocr_mask       = MMC_VDD_32_33 | MMC_VDD_33_34,
+       .setpower       = treo680_mci_power,
+       .get_ro         = treo680_mci_get_ro,
+       .init           = treo680_mci_init,
+       .exit           = treo680_mci_exit,
+};
+
+/******************************************************************************
+ * GPIO keyboard
+ ******************************************************************************/
+static unsigned int treo680_matrix_keys[] = {
+       KEY(0, 0, KEY_F8),              /* Red/Off/Power */
+       KEY(0, 1, KEY_LEFT),
+       KEY(0, 2, KEY_LEFTCTRL),        /* Alternate */
+       KEY(0, 3, KEY_L),
+       KEY(0, 4, KEY_A),
+       KEY(0, 5, KEY_Q),
+       KEY(0, 6, KEY_P),
+
+       KEY(1, 0, KEY_RIGHTCTRL),       /* Menu */
+       KEY(1, 1, KEY_RIGHT),
+       KEY(1, 2, KEY_LEFTSHIFT),       /* Left shift */
+       KEY(1, 3, KEY_Z),
+       KEY(1, 4, KEY_S),
+       KEY(1, 5, KEY_W),
+
+       KEY(2, 0, KEY_F1),              /* Phone */
+       KEY(2, 1, KEY_UP),
+       KEY(2, 2, KEY_0),
+       KEY(2, 3, KEY_X),
+       KEY(2, 4, KEY_D),
+       KEY(2, 5, KEY_E),
+
+       KEY(3, 0, KEY_F10),             /* Calendar */
+       KEY(3, 1, KEY_DOWN),
+       KEY(3, 2, KEY_SPACE),
+       KEY(3, 3, KEY_C),
+       KEY(3, 4, KEY_F),
+       KEY(3, 5, KEY_R),
+
+       KEY(4, 0, KEY_F12),             /* Mail */
+       KEY(4, 1, KEY_KPENTER),
+       KEY(4, 2, KEY_RIGHTALT),        /* Alt */
+       KEY(4, 3, KEY_V),
+       KEY(4, 4, KEY_G),
+       KEY(4, 5, KEY_T),
+
+       KEY(5, 0, KEY_F9),              /* Home */
+       KEY(5, 1, KEY_PAGEUP),          /* Side up */
+       KEY(5, 2, KEY_DOT),
+       KEY(5, 3, KEY_B),
+       KEY(5, 4, KEY_H),
+       KEY(5, 5, KEY_Y),
+
+       KEY(6, 0, KEY_TAB),             /* Side Activate */
+       KEY(6, 1, KEY_PAGEDOWN),        /* Side down */
+       KEY(6, 2, KEY_ENTER),
+       KEY(6, 3, KEY_N),
+       KEY(6, 4, KEY_J),
+       KEY(6, 5, KEY_U),
+
+       KEY(7, 0, KEY_F6),              /* Green/Call */
+       KEY(7, 1, KEY_O),
+       KEY(7, 2, KEY_BACKSPACE),
+       KEY(7, 3, KEY_M),
+       KEY(7, 4, KEY_K),
+       KEY(7, 5, KEY_I),
+};
+
+static struct pxa27x_keypad_platform_data treo680_keypad_platform_data = {
+       .matrix_key_rows        = 8,
+       .matrix_key_cols        = 7,
+       .matrix_key_map         = treo680_matrix_keys,
+       .matrix_key_map_size    = ARRAY_SIZE(treo680_matrix_keys),
+       .direct_key_map         = { KEY_CONNECT },
+       .direct_key_num         = 1,
+
+       .debounce_interval      = 30,
+};
+
+/******************************************************************************
+ * aSoC audio
+ ******************************************************************************/
+
+static pxa2xx_audio_ops_t treo680_ac97_pdata = {
+       .reset_gpio     = 95,
+};
+
+/******************************************************************************
+ * Backlight
+ ******************************************************************************/
+static int treo680_backlight_init(struct device *dev)
+{
+       int ret;
+
+       ret = gpio_request(GPIO_NR_TREO680_BL_POWER, "BL POWER");
+       if (ret)
+               goto err;
+       ret = gpio_direction_output(GPIO_NR_TREO680_BL_POWER, 0);
+       if (ret)
+               goto err2;
+       ret = gpio_request(GPIO_NR_TREO680_LCD_POWER, "LCD POWER");
+       if (ret)
+               goto err2;
+       ret = gpio_direction_output(GPIO_NR_TREO680_LCD_POWER, 0);
+       if (ret)
+               goto err3;
+
+       return 0;
+err3:
+       gpio_free(GPIO_NR_TREO680_LCD_POWER);
+err2:
+       gpio_free(GPIO_NR_TREO680_BL_POWER);
+err:
+       return ret;
+}
+
+static int treo680_backlight_notify(int brightness)
+{
+       gpio_set_value(GPIO_NR_TREO680_BL_POWER, brightness);
+       return TREO680_MAX_INTENSITY - brightness;
+};
+
+static void treo680_backlight_exit(struct device *dev)
+{
+       gpio_free(GPIO_NR_TREO680_BL_POWER);
+       gpio_free(GPIO_NR_TREO680_LCD_POWER);
+}
+
+static struct platform_pwm_backlight_data treo680_backlight_data = {
+       .pwm_id         = 0,
+       .max_brightness = TREO680_MAX_INTENSITY,
+       .dft_brightness = TREO680_DEFAULT_INTENSITY,
+       .pwm_period_ns  = TREO680_PERIOD_NS,
+       .init           = treo680_backlight_init,
+       .notify         = treo680_backlight_notify,
+       .exit           = treo680_backlight_exit,
+};
+
+static struct platform_device treo680_backlight = {
+       .name   = "pwm-backlight",
+       .dev    = {
+               .parent         = &pxa27x_device_pwm0.dev,
+               .platform_data  = &treo680_backlight_data,
+       },
+};
+
+/******************************************************************************
+ * IrDA
+ ******************************************************************************/
+static void treo680_transceiver_mode(struct device *dev, int mode)
+{
+       gpio_set_value(GPIO_NR_TREO680_IR_EN, mode & IR_OFF);
+       pxa2xx_transceiver_mode(dev, mode);
+}
+
+static int treo680_irda_startup(struct device *dev)
+{
+       int err;
+
+       err = gpio_request(GPIO_NR_TREO680_IR_EN, "Ir port disable");
+       if (err)
+               goto err1;
+
+       err = gpio_direction_output(GPIO_NR_TREO680_IR_EN, 1);
+       if (err)
+               goto err2;
+
+       return 0;
+
+err2:
+       dev_err(dev, "treo680_irda: cannot change IR gpio direction\n");
+       gpio_free(GPIO_NR_TREO680_IR_EN);
+err1:
+       dev_err(dev, "treo680_irda: cannot allocate IR gpio\n");
+       return err;
+}
+
+static void treo680_irda_shutdown(struct device *dev)
+{
+       gpio_free(GPIO_NR_TREO680_AMP_EN);
+}
+
+static struct pxaficp_platform_data treo680_ficp_info = {
+       .transceiver_cap  = IR_FIRMODE | IR_SIRMODE | IR_OFF,
+       .startup          = treo680_irda_startup,
+       .shutdown         = treo680_irda_shutdown,
+       .transceiver_mode = treo680_transceiver_mode,
+};
+
+/******************************************************************************
+ * UDC
+ ******************************************************************************/
+static struct pxa2xx_udc_mach_info treo680_udc_info __initdata = {
+       .gpio_vbus              = GPIO_NR_TREO680_USB_DETECT,
+       .gpio_vbus_inverted     = 1,
+       .gpio_pullup            = GPIO_NR_TREO680_USB_PULLUP,
+};
+
+
+/******************************************************************************
+ * USB host
+ ******************************************************************************/
+static struct pxaohci_platform_data treo680_ohci_info = {
+       .port_mode    = PMM_PERPORT_MODE,
+       .flags        = ENABLE_PORT1 | ENABLE_PORT3,
+       .power_budget = 0,
+};
+
+/******************************************************************************
+ * Power supply
+ ******************************************************************************/
+static int power_supply_init(struct device *dev)
+{
+       int ret;
+
+       ret = gpio_request(GPIO_NR_TREO680_POWER_DETECT, "CABLE_STATE_AC");
+       if (ret)
+               goto err1;
+       ret = gpio_direction_input(GPIO_NR_TREO680_POWER_DETECT);
+       if (ret)
+               goto err2;
+
+       return 0;
+
+err2:
+       gpio_free(GPIO_NR_TREO680_POWER_DETECT);
+err1:
+       return ret;
+}
+
+static int treo680_is_ac_online(void)
+{
+       return gpio_get_value(GPIO_NR_TREO680_POWER_DETECT);
+}
+
+static void power_supply_exit(struct device *dev)
+{
+       gpio_free(GPIO_NR_TREO680_POWER_DETECT);
+}
+
+static char *treo680_supplicants[] = {
+       "main-battery",
+};
+
+static struct pda_power_pdata power_supply_info = {
+       .init            = power_supply_init,
+       .is_ac_online    = treo680_is_ac_online,
+       .exit            = power_supply_exit,
+       .supplied_to     = treo680_supplicants,
+       .num_supplicants = ARRAY_SIZE(treo680_supplicants),
+};
+
+static struct platform_device power_supply = {
+       .name = "pda-power",
+       .id   = -1,
+       .dev  = {
+               .platform_data = &power_supply_info,
+       },
+};
+
+/******************************************************************************
+ * Vibra and LEDs
+ ******************************************************************************/
+static struct gpio_led gpio_leds[] = {
+       {
+               .name                   = "treo680:vibra:vibra",
+               .default_trigger        = "none",
+               .gpio                   = GPIO_NR_TREO680_VIBRATE_EN,
+       },
+       {
+               .name                   = "treo680:green:led",
+               .default_trigger        = "mmc0",
+               .gpio                   = GPIO_NR_TREO680_GREEN_LED,
+       },
+       {
+               .name                   = "treo680:keybbl:keybbl",
+               .default_trigger        = "none",
+               .gpio                   = GPIO_NR_TREO680_KEYB_BL,
+       },
+};
+
+static struct gpio_led_platform_data gpio_led_info = {
+       .leds           = gpio_leds,
+       .num_leds       = ARRAY_SIZE(gpio_leds),
+};
+
+static struct platform_device treo680_leds = {
+       .name   = "leds-gpio",
+       .id     = -1,
+       .dev    = {
+               .platform_data  = &gpio_led_info,
+       }
+};
+
+
+/******************************************************************************
+ * Framebuffer
+ ******************************************************************************/
+/* TODO: add support for 324x324 */
+static struct pxafb_mode_info treo680_lcd_modes[] = {
+{
+       .pixclock               = 86538,
+       .xres                   = 320,
+       .yres                   = 320,
+       .bpp                    = 16,
+
+       .left_margin            = 20,
+       .right_margin           = 8,
+       .upper_margin           = 8,
+       .lower_margin           = 5,
+
+       .hsync_len              = 4,
+       .vsync_len              = 1,
+},
+};
+
+static struct pxafb_mach_info treo680_lcd_screen = {
+       .modes          = treo680_lcd_modes,
+       .num_modes      = ARRAY_SIZE(treo680_lcd_modes),
+       .lcd_conn       = LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL,
+};
+
+/******************************************************************************
+ * Power management - standby
+ ******************************************************************************/
+static void __init treo680_pm_init(void)
+{
+       static u32 resume[] = {
+               0xe3a00101,     /* mov  r0,     #0x40000000 */
+               0xe380060f,     /* orr  r0, r0, #0x00f00000 */
+               0xe590f008,     /* ldr  pc, [r0, #0x08] */
+       };
+
+       /* this is where the bootloader jumps */
+       memcpy(phys_to_virt(TREO680_STR_BASE), resume, sizeof(resume));
+}
+
+/******************************************************************************
+ * Machine init
+ ******************************************************************************/
+static struct platform_device *devices[] __initdata = {
+       &treo680_backlight,
+       &treo680_leds,
+       &power_supply,
+};
+
+/* setup udc GPIOs initial state */
+static void __init treo680_udc_init(void)
+{
+       if (!gpio_request(GPIO_NR_TREO680_USB_PULLUP, "UDC Vbus")) {
+               gpio_direction_output(GPIO_NR_TREO680_USB_PULLUP, 1);
+               gpio_free(GPIO_NR_TREO680_USB_PULLUP);
+       }
+}
+
+static void __init treo680_init(void)
+{
+       treo680_pm_init();
+       pxa2xx_mfp_config(ARRAY_AND_SIZE(treo680_pin_config));
+       pxa_set_keypad_info(&treo680_keypad_platform_data);
+       set_pxa_fb_info(&treo680_lcd_screen);
+       pxa_set_mci_info(&treo680_mci_platform_data);
+       treo680_udc_init();
+       pxa_set_udc_info(&treo680_udc_info);
+       pxa_set_ac97_info(&treo680_ac97_pdata);
+       pxa_set_ficp_info(&treo680_ficp_info);
+       pxa_set_ohci_info(&treo680_ohci_info);
+
+       platform_add_devices(devices, ARRAY_SIZE(devices));
+}
+
+MACHINE_START(TREO680, "Palm Treo 680")
+       .phys_io        = TREO680_PHYS_IO_START,
+       .io_pg_offst    = io_p2v(0x40000000),
+       .boot_params    = 0xa0000100,
+       .map_io         = pxa_map_io,
+       .init_irq       = pxa27x_init_irq,
+       .timer          = &pxa_timer,
+       .init_machine   = treo680_init,
+MACHINE_END
index fdaa9bb87c163b89b19d8daa40f15352a1c06447..4722582b17b82f526feef2d2f439bef26a98e946 100644 (file)
@@ -836,6 +836,13 @@ void __init reserve_node_zero(pg_data_t *pgdat)
                                BOOTMEM_EXCLUSIVE);
        }
 
+       if (machine_is_treo680()) {
+               reserve_bootmem_node(pgdat, 0xa0000000, 0x1000,
+                               BOOTMEM_EXCLUSIVE);
+               reserve_bootmem_node(pgdat, 0xa2000000, 0x1000,
+                               BOOTMEM_EXCLUSIVE);
+       }
+
        if (machine_is_palmt5())
                reserve_bootmem_node(pgdat, 0xa0200000, 0x1000,
                                BOOTMEM_EXCLUSIVE);
index d5be2b30cda5895d34a1802d452ea3f0db2da74e..fefe1a57f31adb329493bc482668a053afb65ea8 100644 (file)
@@ -320,38 +320,6 @@ static struct snd_soc_device corgi_snd_devdata = {
        .codec_dev = &soc_codec_dev_wm8731,
 };
 
-/*
- * FIXME: This is a temporary bodge to avoid cross-tree merge issues.
- * New drivers should register the wm8731 I2C device in the machine
- * setup code (under arch/arm for ARM systems).
- */
-static int wm8731_i2c_register(void)
-{
-       struct i2c_board_info info;
-       struct i2c_adapter *adapter;
-       struct i2c_client *client;
-
-       memset(&info, 0, sizeof(struct i2c_board_info));
-       info.addr = 0x1b;
-       strlcpy(info.type, "wm8731", I2C_NAME_SIZE);
-
-       adapter = i2c_get_adapter(0);
-       if (!adapter) {
-               printk(KERN_ERR "can't get i2c adapter 0\n");
-               return -ENODEV;
-       }
-
-       client = i2c_new_device(adapter, &info);
-       i2c_put_adapter(adapter);
-       if (!client) {
-               printk(KERN_ERR "can't add i2c device at 0x%x\n",
-                       (unsigned int)info.addr);
-               return -ENODEV;
-       }
-
-       return 0;
-}
-
 static struct platform_device *corgi_snd_device;
 
 static int __init corgi_init(void)
@@ -362,10 +330,6 @@ static int __init corgi_init(void)
              machine_is_husky()))
                return -ENODEV;
 
-       ret = wm8731_i2c_register();
-       if (ret != 0)
-               return ret;
-
        corgi_snd_device = platform_device_alloc("soc-audio", -1);
        if (!corgi_snd_device)
                return -ENOMEM;
index a51058f66747fdad48b6b5dde422fd8d6d62de27..c5f36e0eab58db4a188e36316f7239fab3272599 100644 (file)
@@ -280,38 +280,6 @@ static struct snd_soc_card snd_soc_poodle = {
        .num_links = 1,
 };
 
-/*
- * FIXME: This is a temporary bodge to avoid cross-tree merge issues.
- * New drivers should register the wm8731 I2C device in the machine
- * setup code (under arch/arm for ARM systems).
- */
-static int wm8731_i2c_register(void)
-{
-       struct i2c_board_info info;
-       struct i2c_adapter *adapter;
-       struct i2c_client *client;
-
-       memset(&info, 0, sizeof(struct i2c_board_info));
-       info.addr = 0x1b;
-       strlcpy(info.type, "wm8731", I2C_NAME_SIZE);
-
-       adapter = i2c_get_adapter(0);
-       if (!adapter) {
-               printk(KERN_ERR "can't get i2c adapter 0\n");
-               return -ENODEV;
-       }
-
-       client = i2c_new_device(adapter, &info);
-       i2c_put_adapter(adapter);
-       if (!client) {
-               printk(KERN_ERR "can't add i2c device at 0x%x\n",
-                       (unsigned int)info.addr);
-               return -ENODEV;
-       }
-
-       return 0;
-}
-
 /* poodle audio subsystem */
 static struct snd_soc_device poodle_snd_devdata = {
        .card = &snd_soc_poodle,
@@ -327,10 +295,6 @@ static int __init poodle_init(void)
        if (!machine_is_poodle())
                return -ENODEV;
 
-       ret = wm8731_i2c_register();
-       if (ret != 0)
-               return ret;
-
        locomo_gpio_set_dir(&poodle_locomo_device.dev,
                POODLE_LOCOMO_GPIO_AMP_ON, 0);
        /* should we mute HP at startup - burning power ?*/