summaryrefslogtreecommitdiff
path: root/packages/linux/linux-2.6.28/ronetix-pm9263/linux-2.6.28-at91-ronetix-12012009.patch
diff options
context:
space:
mode:
Diffstat (limited to 'packages/linux/linux-2.6.28/ronetix-pm9263/linux-2.6.28-at91-ronetix-12012009.patch')
-rw-r--r--packages/linux/linux-2.6.28/ronetix-pm9263/linux-2.6.28-at91-ronetix-12012009.patch1751
1 files changed, 0 insertions, 1751 deletions
diff --git a/packages/linux/linux-2.6.28/ronetix-pm9263/linux-2.6.28-at91-ronetix-12012009.patch b/packages/linux/linux-2.6.28/ronetix-pm9263/linux-2.6.28-at91-ronetix-12012009.patch
deleted file mode 100644
index fbd0c90a23..0000000000
--- a/packages/linux/linux-2.6.28/ronetix-pm9263/linux-2.6.28-at91-ronetix-12012009.patch
+++ /dev/null
@@ -1,1751 +0,0 @@
-diff -urNp linux-2.6.28-at91/arch/arm/mach-at91/at91sam9263_devices.c.rej linux-2.6.28-at91-ronetix/arch/arm/mach-at91/at91sam9263_devices.c.rej
---- linux-2.6.28-at91/arch/arm/mach-at91/at91sam9263_devices.c.rej 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.28-at91-ronetix/arch/arm/mach-at91/at91sam9263_devices.c.rej 2009-01-12 16:00:42.000000000 +0100
-@@ -0,0 +1,17 @@
-+***************
-+*** 645,651 ****
-+ if (data->reset_pin)
-+ at91_set_gpio_output(data->reset_pin, 0);
-+
-+- ac97_data = *ek_data;
-+ platform_device_register(&at91sam9263_ac97_device);
-+ }
-+ #else
-+--- 645,651 ----
-+ if (data->reset_pin)
-+ at91_set_gpio_output(data->reset_pin, 0);
-+
-++ ac97_data = *data;
-+ platform_device_register(&at91sam9263_ac97_device);
-+ }
-+ #else
-diff -urNp linux-2.6.28-at91/arch/arm/mach-at91/board-pm9263.c linux-2.6.28-at91-ronetix/arch/arm/mach-at91/board-pm9263.c
---- linux-2.6.28-at91/arch/arm/mach-at91/board-pm9263.c 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.28-at91-ronetix/arch/arm/mach-at91/board-pm9263.c 2009-01-12 16:00:42.000000000 +0100
-@@ -0,0 +1,528 @@
-+/*
-+ * linux/arch/arm/mach-at91/board-pm9263.c
-+ *
-+ * Copyright (C) 2008 Ronetix
-+ *
-+ * 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/types.h>
-+#include <linux/init.h>
-+#include <linux/mm.h>
-+#include <linux/module.h>
-+#include <linux/platform_device.h>
-+#include <linux/spi/spi.h>
-+#include <linux/spi/ads7846.h>
-+#include <linux/i2c/at24.h>
-+#include <linux/fb.h>
-+#include <linux/gpio_keys.h>
-+#include <linux/input.h>
-+#include <linux/leds.h>
-+#include <linux/w1-gpio.h>
-+
-+#include <video/atmel_lcdc.h>
-+
-+#include <asm/setup.h>
-+#include <asm/mach-types.h>
-+#include <asm/irq.h>
-+
-+#include <asm/mach/arch.h>
-+#include <asm/mach/map.h>
-+#include <asm/mach/irq.h>
-+
-+#include <mach/hardware.h>
-+#include <mach/board.h>
-+#include <mach/gpio.h>
-+#include <mach/at91sam9_smc.h>
-+#include <mach/at91_shdwc.h>
-+#include <mach/at91sam9263_matrix.h>
-+
-+#include "sam9_smc.h"
-+#include "generic.h"
-+
-+
-+static void __init pm9263_map_io(void)
-+{
-+ /* Initialize processor: 18.432 MHz crystal */
-+ at91sam9263_initialize(18432000);
-+
-+ /* DGBU on ttyS0. (Rx & Tx only) */
-+ at91_register_uart(0, 0, 0);
-+
-+ /* USART0 on ttyS1. (Rx, Tx, RTS, CTS) */
-+ at91_register_uart(AT91SAM9263_ID_US0, 1, ATMEL_UART_CTS | ATMEL_UART_RTS);
-+
-+ /* set serial console to ttyS0 (ie, DBGU) */
-+ at91_set_serial_console(0);
-+}
-+
-+static void __init pm9263_init_irq(void)
-+{
-+ at91sam9263_init_interrupts(NULL);
-+}
-+
-+
-+/*
-+ * USB Host port
-+ */
-+static struct at91_usbh_data __initdata pm9263_usbh_data = {
-+ .ports = 2,
-+ .vbus_pin = { 0, 0 },
-+};
-+
-+/*
-+ * USB Device port
-+ */
-+static struct at91_udc_data __initdata pm9263_udc_data = {
-+ .vbus_pin = AT91_PIN_PA25,
-+ .pullup_pin = 0, /* pull-up driven by UDC */
-+};
-+
-+
-+/*
-+ * ADS7846 Touchscreen
-+ */
-+#if defined(CONFIG_TOUCHSCREEN_ADS7846) || defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE)
-+static int ads7843_pendown_state(void)
-+{
-+ return !at91_get_gpio_value(AT91_PIN_PA15); /* Touchscreen PENIRQ */
-+}
-+
-+static struct ads7846_platform_data ads_info = {
-+ .model = 7843,
-+ .x_min = 150,
-+ .x_max = 3830,
-+ .y_min = 190,
-+ .y_max = 3830,
-+ .vref_delay_usecs = 100,
-+ .x_plate_ohms = 450,
-+ .y_plate_ohms = 250,
-+ .pressure_max = 15000,
-+ .debounce_max = 1,
-+ .debounce_rep = 0,
-+ .debounce_tol = (~0),
-+ .get_pendown_state = ads7843_pendown_state,
-+};
-+
-+static void __init pm9263_add_device_ts(void)
-+{
-+ at91_set_B_periph(AT91_PIN_PA15, 1); /* External IRQ1, with pullup */
-+ at91_set_gpio_input(AT91_PIN_PA31, 1); /* Touchscreen BUSY signal */
-+}
-+#else
-+static void __init pm9263_add_device_ts(void) {}
-+#endif
-+
-+/*
-+ * SPI devices.
-+ */
-+static struct spi_board_info pm9263_spi_devices[] = {
-+#if defined(CONFIG_MTD_AT91_DATAFLASH_CARD)
-+ { /* DataFlash card */
-+ .modalias = "mtd_dataflash",
-+ .chip_select = 0,
-+ .max_speed_hz = 15 * 1000 * 1000,
-+ .bus_num = 0,
-+ },
-+#endif
-+#if defined(CONFIG_TOUCHSCREEN_ADS7846) || defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE)
-+ {
-+ .modalias = "ads7846",
-+ .chip_select = 0,
-+ .max_speed_hz = 125000 * 16, /* max sample rate * clocks per sample */
-+ .bus_num = 1,
-+ .platform_data = &ads_info,
-+ .irq = AT91SAM9263_ID_IRQ1,
-+ },
-+#endif
-+};
-+
-+
-+/*
-+ * MCI (SD/MMC)
-+ */
-+static struct at91_mmc_data __initdata pm9263_mmc_data = {
-+ .wire4 = 1,
-+ .det_pin = AT91_PIN_PA21,
-+ .wp_pin = AT91_PIN_PA16,
-+// .vcc_pin = ... not connected
-+};
-+
-+
-+/*
-+ * MACB Ethernet device
-+ */
-+static struct at91_eth_data __initdata pm9263_macb_data = {
-+ .phy_irq_pin = AT91_PIN_PE31,
-+ .is_rmii = 1,
-+};
-+
-+
-+/*
-+ * NAND flash
-+ */
-+static struct mtd_partition __initdata pm9263_nand_partition[] = {
-+ {
-+ .name = "Partition 1",
-+ .offset = 0,
-+ .size = MTDPART_SIZ_FULL,
-+ },
-+};
-+
-+static struct mtd_partition * __init nand_partitions(int size, int *num_partitions)
-+{
-+ *num_partitions = ARRAY_SIZE(pm9263_nand_partition);
-+ return pm9263_nand_partition;
-+}
-+
-+static struct atmel_nand_data __initdata pm9263_nand_data = {
-+ .ale = 21,
-+ .cle = 22,
-+// .det_pin = ... not connected
-+ .rdy_pin = AT91_PIN_PB30,
-+ .enable_pin = AT91_PIN_PD15,
-+ .partition_info = nand_partitions,
-+#if defined(CONFIG_MTD_NAND_ATMEL_BUSWIDTH_16)
-+ .bus_width_16 = 1,
-+#else
-+ .bus_width_16 = 0,
-+#endif
-+};
-+
-+static struct sam9_smc_config __initdata pm9263_nand_smc_config = {
-+ .ncs_read_setup = 0,
-+ .nrd_setup = 1,
-+ .ncs_write_setup = 0,
-+ .nwe_setup = 1,
-+
-+ .ncs_read_pulse = 3,
-+ .nrd_pulse = 3,
-+ .ncs_write_pulse = 3,
-+ .nwe_pulse = 3,
-+
-+ .read_cycle = 5,
-+ .write_cycle = 5,
-+
-+ .mode = AT91_SMC_READMODE | AT91_SMC_WRITEMODE | AT91_SMC_EXNWMODE_DISABLE,
-+ .tdf_cycles = 2,
-+};
-+
-+static void __init pm9263_add_device_nand(void)
-+{
-+ /* setup bus-width (8 or 16) */
-+ if (pm9263_nand_data.bus_width_16)
-+ pm9263_nand_smc_config.mode |= AT91_SMC_DBW_16;
-+ else
-+ pm9263_nand_smc_config.mode |= AT91_SMC_DBW_8;
-+
-+ /* configure chip-select 3 (NAND) */
-+ sam9_smc_configure(3, &pm9263_nand_smc_config);
-+
-+ at91_add_device_nand(&pm9263_nand_data);
-+}
-+
-+
-+/*
-+ * LCD Controller
-+ */
-+#if defined(CONFIG_FB_ATMEL) || defined(CONFIG_FB_ATMEL_MODULE)
-+static struct fb_videomode at91_tft_vga_modes[] = {
-+ {
-+ .name = "TX09D50VM1CCA @ 60",
-+ .refresh = 60,
-+ .xres = 240, .yres = 320,
-+ .pixclock = KHZ2PICOS(4965),
-+
-+ .left_margin = 1, .right_margin = 33,
-+ .upper_margin = 1, .lower_margin = 0,
-+ .hsync_len = 5, .vsync_len = 1,
-+
-+ .sync = FB_SYNC_HOR_HIGH_ACT | FB_SYNC_VERT_HIGH_ACT,
-+ .vmode = FB_VMODE_NONINTERLACED,
-+ },
-+};
-+
-+static struct fb_monspecs at91fb_default_monspecs = {
-+ .manufacturer = "HIT",
-+ .monitor = "TX09D70VM1CCA",
-+
-+ .modedb = at91_tft_vga_modes,
-+ .modedb_len = ARRAY_SIZE(at91_tft_vga_modes),
-+ .hfmin = 15000,
-+ .hfmax = 64000,
-+ .vfmin = 50,
-+ .vfmax = 150,
-+};
-+
-+#define AT91SAM9263_DEFAULT_LCDCON2 (ATMEL_LCDC_MEMOR_LITTLE \
-+ | ATMEL_LCDC_DISTYPE_TFT \
-+ | ATMEL_LCDC_CLKMOD_ALWAYSACTIVE)
-+
-+static void at91_lcdc_power_control(int on)
-+{
-+ at91_set_gpio_value(AT91_PIN_PA22, on);
-+}
-+
-+/* Driver datas */
-+static struct atmel_lcdfb_info __initdata pm9263_lcdc_data = {
-+ .lcdcon_is_backlight = true,
-+ .default_bpp = 16,
-+ .default_dmacon = ATMEL_LCDC_DMAEN,
-+ .default_lcdcon2 = AT91SAM9263_DEFAULT_LCDCON2,
-+ .default_monspecs = &at91fb_default_monspecs,
-+ .atmel_lcdfb_power_control = at91_lcdc_power_control,
-+ .guard_time = 1,
-+};
-+
-+#else
-+static struct atmel_lcdfb_info __initdata pm9263_lcdc_data;
-+#endif
-+
-+
-+/*
-+ * GPIO Buttons
-+ */
-+#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
-+static struct gpio_keys_button pm9263_buttons[] = {
-+ { /* SW3 */
-+ .code = BTN_LEFT,
-+ .gpio = AT91_PIN_PC5,
-+ .active_low = 1,
-+ .desc = "SW3",
-+ .wakeup = 1,
-+ },
-+ { /* SW4 */
-+ .code = BTN_RIGHT,
-+ .gpio = AT91_PIN_PC4,
-+ .active_low = 1,
-+ .desc = "SW4",
-+ .wakeup = 1,
-+ }
-+};
-+
-+static struct gpio_keys_platform_data pm9263_button_data = {
-+ .buttons = pm9263_buttons,
-+ .nbuttons = ARRAY_SIZE(pm9263_buttons),
-+};
-+
-+static struct platform_device pm9263_button_device = {
-+ .name = "gpio-keys",
-+ .id = -1,
-+ .num_resources = 0,
-+ .dev = {
-+ .platform_data = &pm9263_button_data,
-+ }
-+};
-+
-+static void __init pm9263_add_device_buttons(void)
-+{
-+ int i;
-+
-+ for (i = 0; i < pm9263_button_data.nbuttons; i ++) {
-+ at91_set_gpio_input(pm9263_buttons[i].gpio, 1);
-+ at91_set_deglitch(pm9263_buttons[i].gpio, 1);
-+ }
-+
-+// platform_device_register(&pm9263_button_device);
-+}
-+#else
-+static void __init pm9263_add_device_buttons(void) {}
-+#endif
-+
-+
-+/*
-+ * AC97
-+ */
-+static struct atmel_ac97_data pm9263_ac97_data = {
-+ .reset_pin = 0,
-+};
-+
-+
-+/*
-+ * LEDs ... these could all be PWM-driven, for variable brightness
-+ */
-+static struct gpio_led pm9263_leds[] = {
-+ { /* "right" led, green, userled2 (could be driven by pwm2) */
-+ .name = "led0",
-+ .gpio = AT91_PIN_PB7,
-+ .active_low = 1,
-+ .default_trigger = "nand-disk",
-+ },
-+ { /* "power" led, yellow (could be driven by pwm0) */
-+ .name = "led1",
-+ .gpio = AT91_PIN_PB8,
-+ .active_low = 1,
-+ .default_trigger = "heartbeat",
-+ }
-+};
-+
-+#if defined(CONFIG_W1_MASTER_GPIO) || defined(CONFIG_W1_MASTER_GPIO_MODULE)
-+struct w1_gpio_platform_data pm926x_w1_platdata = {
-+ .pin = AT91_PIN_PB31,
-+ .is_open_drain = 0,
-+};
-+
-+static struct platform_device pm926x_w1_device = {
-+ .name = "w1-gpio",
-+ .id = 0,
-+ .dev = {
-+ .platform_data = &pm926x_w1_platdata,
-+ },
-+};
-+#endif
-+
-+#if defined(CONFIG_AT91_CF) || defined(CONFIG_AT91_CF_MODULE)
-+static struct at91_cf_data pm9263_cf_data = {
-+ .det_pin = AT91_PIN_PA30,
-+ .rst_pin = AT91_PIN_PA23,
-+ .irq_pin = AT91_PIN_PA24,
-+ // .vcc_pin = ... always powered
-+ .chipselect = 4,
-+};
-+
-+static struct resource pm9263_cf_resources[] = {
-+ [0] = {
-+ .start = AT91_CHIPSELECT_4,
-+ .end = AT91_CHIPSELECT_4 + (0x10000000 - 1),
-+ .flags = IORESOURCE_MEM | IORESOURCE_MEM_8AND16BIT,
-+ },
-+};
-+
-+static struct platform_device pm9263_cf_device = {
-+ .name = "at91_cf",
-+ .id = -1,
-+ .dev = {
-+ .platform_data = &pm9263_cf_data,
-+ },
-+ .resource = pm9263_cf_resources,
-+ .num_resources = ARRAY_SIZE(pm9263_cf_resources),
-+};
-+
-+#define CF_NWE_SETUP (9 << 0)
-+#define CF_NCS_WR_SETUP (2 << 8)
-+#define CF_NRD_SETUP (9 << 16)
-+#define CF_NCS_RD_SETUP (2 << 24)
-+
-+#define CF_NWE_PULSE (17 << 0)
-+#define CF_NCS_WR_PULSE (27 << 8)
-+#define CF_NRD_PULSE (17 << 16)
-+#define CF_NCS_RD_PULSE (27 << 24)
-+
-+#define CF_NWE_CYCLE (40 << 0)
-+#define CF_NRD_CYCLE (40 << 16)
-+
-+#define CF_TDF (1 << 16)
-+
-+static void __init pm9263_add_device_cf(void) {
-+struct at91_cf_data *data = & pm9263_cf_data;
-+unsigned int csa;
-+
-+ // Setup Compact flash, first enable the address range of
-+ // CS4 in HMATRIX user interface
-+ csa = at91_sys_read(AT91_MATRIX_EBI0CSA);
-+ at91_sys_write(AT91_MATRIX_EBI0CSA, csa | AT91_MATRIX_EBI0_CS4A_SMC_CF1);
-+
-+ /* Configure SMC CS4 */
-+ at91_sys_write(AT91_SMC_SETUP(4),
-+ (CF_NWE_SETUP |
-+ CF_NCS_WR_SETUP |
-+ CF_NRD_SETUP |
-+ CF_NCS_RD_SETUP));
-+
-+ at91_sys_write(AT91_SMC_PULSE(4), (CF_NWE_PULSE |
-+ CF_NCS_WR_PULSE |
-+ CF_NRD_PULSE |
-+ CF_NCS_RD_PULSE));
-+ at91_sys_write(AT91_SMC_CYCLE(4), (CF_NWE_CYCLE | CF_NRD_CYCLE));
-+ // 16 bit
-+ at91_sys_write (AT91_SMC_MODE(4), (AT91_SMC_READMODE |
-+ AT91_SMC_WRITEMODE |
-+ AT91_SMC_EXNWMODE_DISABLE |
-+ AT91_SMC_DBW_16 |
-+ CF_TDF));
-+
-+ /* input/irq */
-+ if (data->irq_pin) {
-+ at91_set_gpio_input(data->irq_pin, 0);
-+ at91_set_deglitch(data->irq_pin, 1);
-+ }
-+ at91_set_gpio_input(data->det_pin, 0);
-+ at91_set_deglitch(data->det_pin, 1);
-+
-+ /* outputs, initially off */
-+ if (data->vcc_pin)
-+ at91_set_gpio_output(data->vcc_pin, 0);
-+ if (data->rst_pin)
-+ at91_set_gpio_output(data->rst_pin, 0);
-+
-+ /* force poweron defaults for these pins ... */
-+ at91_set_A_periph(AT91_PIN_PD5, 0); /* PD5/CF_NWAIT */
-+ at91_set_A_periph(AT91_PIN_PD14, 0); /* A25/CFRNW */
-+ at91_set_A_periph(AT91_PIN_PD6, 0); /* NCS4/CFCS0 */
-+ at91_set_A_periph(AT91_PIN_PD8, 0); /* PD8/CFCE1 */
-+ at91_set_A_periph(AT91_PIN_PD9, 0); /* PD9/CFCE2 */
-+
-+ platform_device_register(&pm9263_cf_device);
-+}
-+#else
-+void __init pm9263_add_device_cf(void) {}
-+#endif
-+
-+static void __init pm9263_board_init(void)
-+{
-+ /* Serial */
-+ at91_add_device_serial();
-+ /* USB Host */
-+ at91_add_device_usbh(&pm9263_usbh_data);
-+ /* USB Device */
-+ at91_add_device_udc(&pm9263_udc_data);
-+ /* SPI */
-+ at91_add_device_spi(pm9263_spi_devices, ARRAY_SIZE(pm9263_spi_devices));
-+ /* Touchscreen */
-+ pm9263_add_device_ts();
-+ /* MMC */
-+ at91_add_device_mmc(1, &pm9263_mmc_data);
-+ /* Ethernet */
-+ at91_add_device_eth(&pm9263_macb_data);
-+ /* NAND */
-+ pm9263_add_device_nand();
-+ /* LCD Controller */
-+ at91_add_device_lcdc(&pm9263_lcdc_data);
-+ /* Push Buttons */
-+ pm9263_add_device_buttons();
-+ /* AC97 */
-+ at91_add_device_ac97(&pm9263_ac97_data);
-+#if defined(CONFIG_W1_MASTER_GPIO) || defined(CONFIG_W1_MASTER_GPIO_MODULE)
-+ platform_device_register(&pm926x_w1_device);
-+#endif
-+ /* Compact flash */
-+ pm9263_add_device_cf();
-+ /* LEDs */
-+ at91_gpio_leds(pm9263_leds, ARRAY_SIZE(pm9263_leds));
-+ /* shutdown controller, wakeup button (5 msec low) */
-+ at91_sys_write(AT91_SHDW_MR, AT91_SHDW_CPTWK0_(10) | AT91_SHDW_WKMODE0_LOW
-+ | AT91_SHDW_RTTWKEN);
-+}
-+
-+MACHINE_START(PM9263, "Ronetix PM9263/BB9263")
-+ /* Maintainer: Atmel */
-+ .phys_io = AT91_BASE_SYS,
-+ .io_pg_offst = (AT91_VA_BASE_SYS >> 18) & 0xfffc,
-+ .boot_params = AT91_SDRAM_BASE + 0x100,
-+ .timer = &at91sam926x_timer,
-+ .map_io = pm9263_map_io,
-+ .init_irq = pm9263_init_irq,
-+ .init_machine = pm9263_board_init,
-+MACHINE_END
-diff -urNp linux-2.6.28-at91/arch/arm/mach-at91/include/mach/at91_ac97c.h linux-2.6.28-at91-ronetix/arch/arm/mach-at91/include/mach/at91_ac97c.h
---- linux-2.6.28-at91/arch/arm/mach-at91/include/mach/at91_ac97c.h 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.28-at91-ronetix/arch/arm/mach-at91/include/mach/at91_ac97c.h 2009-01-12 16:00:42.000000000 +0100
-@@ -0,0 +1,282 @@
-+/* linux/include/asm-arm/arch-at91rm9200/ac97c.h
-+ *
-+ * Hardware definition for the ac97c peripheral in the ATMEL at91sam926x processor
-+ *
-+ * Generated 12/09/2005 (11:54:20) AT91 SW Application Group from AC97C_XXXX V1.3
-+ *
-+ * 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 SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR
-+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE
-+ * DISCLAIMED. IN NO EVENT SHALL ATMEL BE LIABLE FOR ANY DIRECT, INDIRECT,
-+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
-+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
-+ * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
-+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
-+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
-+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-+ *
-+ * 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.,
-+ * 675 Mass Ave, Cambridge, MA 02139, USA.
-+ */
-+
-+
-+#ifndef __AC97C_H
-+#define __AC97C_H
-+
-+/* -------------------------------------------------------- */
-+/* AC97C ID definitions for AT91SAM926x */
-+/* -------------------------------------------------------- */
-+#ifndef AT91C_ID_AC97C
-+#define AT91C_ID_AC97C 18 /**< AC97 Controller id */
-+#endif /* AT91C_ID_AC97C */
-+
-+/* -------------------------------------------------------- */
-+/* AC97C Base Address definitions for AT91SAM926x */
-+/* -------------------------------------------------------- */
-+#define AT91C_BASE_AC97C 0xFFFA0000 /**< AC97C base address */
-+
-+/* -------------------------------------------------------- */
-+/* PIO definition for AC97C hardware peripheral */
-+/* -------------------------------------------------------- */
-+#define AT91C_PB1_AC97CK (1 << 1) /**< */
-+#define AT91C_PB0_AC97FS (1 << 0) /**< */
-+#define AT91C_PB3_AC97RX (1 << 3) /**< */
-+#define AT91C_PB2_AC97TX (1 << 2) /**< */
-+
-+
-+/* -------------------------------------------------------- */
-+/* Register offset definition for AC97C hardware peripheral */
-+/* -------------------------------------------------------- */
-+#define AC97C_MR (0x0008) /**< Mode Register */
-+#define AC97C_ICA (0x0010) /**< Input Channel AssignementRegister */
-+#define AC97C_OCA (0x0014) /**< Output Channel Assignement Register */
-+#define AC97C_CARHR (0x0020) /**< Channel A Receive Holding Register */
-+#define AC97C_CATHR (0x0024) /**< Channel A Transmit Holding Register */
-+#define AC97C_CASR (0x0028) /**< Channel A Status Register */
-+#define AC97C_CAMR (0x002C) /**< Channel A Mode Register */
-+#define AC97C_CBRHR (0x0030) /**< Channel B Receive Holding Register (optional) */
-+#define AC97C_CBTHR (0x0034) /**< Channel B Transmit Holding Register (optional) */
-+#define AC97C_CBSR (0x0038) /**< Channel B Status Register */
-+#define AC97C_CBMR (0x003C) /**< Channel B Mode Register */
-+#define AC97C_CORHR (0x0040) /**< COdec Transmit Holding Register */
-+#define AC97C_COTHR (0x0044) /**< COdec Transmit Holding Register */
-+#define AC97C_COSR (0x0048) /**< CODEC Status Register */
-+#define AC97C_COMR (0x004C) /**< CODEC Mask Status Register */
-+#define AC97C_SR (0x0050) /**< Status Register */
-+#define AC97C_IER (0x0054) /**< Interrupt Enable Register */
-+#define AC97C_IDR (0x0058) /**< Interrupt Disable Register */
-+#define AC97C_IMR (0x005C) /**< Interrupt Mask Register */
-+#define AC97C_VERSION (0x00FC) /**< Version Register */
-+
-+/* -------------------------------------------------------- */
-+/* Bitfields definition for AC97C hardware peripheral */
-+/* -------------------------------------------------------- */
-+/* --- Register AC97C_MR */
-+#define AT91C_AC97C_ENA (0x1 << 0 ) /**< (AC97C) AC97 Controller Global Enable */
-+#define AT91C_AC97C_WRST (0x1 << 1 ) /**< (AC97C) Warm Reset */
-+#define AT91C_AC97C_VRA (0x1 << 2 ) /**< (AC97C) Variable RAte (for Data Slots) */
-+/* --- Register AC97C_ICA */
-+#define AT91C_AC97C_CHID3 (0x7 << 0 ) /**< (AC97C) Channel Id for the input slot 3 */
-+#define AT91C_AC97C_CHID3_NONE 0x0 /**< (AC97C) No data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID3_CA 0x1 /**< (AC97C) Channel A data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID3_CB 0x2 /**< (AC97C) Channel B data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID3_CC 0x3 /**< (AC97C) Channel C data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID4 (0x7 << 3 ) /**< (AC97C) Channel Id for the input slot 4 */
-+#define AT91C_AC97C_CHID4_NONE (0x0 << 3) /**< (AC97C) No data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID4_CA (0x1 << 3) /**< (AC97C) Channel A data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID4_CB (0x2 << 3) /**< (AC97C) Channel B data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID4_CC (0x3 << 3) /**< (AC97C) Channel C data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID5 (0x7 << 6 ) /**< (AC97C) Channel Id for the input slot 5 */
-+#define AT91C_AC97C_CHID5_NONE (0x0 << 6) /**< (AC97C) No data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID5_CA (0x1 << 6) /**< (AC97C) Channel A data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID5_CB (0x2 << 6) /**< (AC97C) Channel B data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID5_CC (0x3 << 6) /**< (AC97C) Channel C data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID6 (0x7 << 9 ) /**< (AC97C) Channel Id for the input slot 6 */
-+#define AT91C_AC97C_CHID6_NONE (0x0 << 9) /**< (AC97C) No data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID6_CA (0x1 << 9) /**< (AC97C) Channel A data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID6_CB (0x2 << 9) /**< (AC97C) Channel B data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID6_CC (0x3 << 9) /**< (AC97C) Channel C data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID7 (0x7 << 12) /**< (AC97C) Channel Id for the input slot 7 */
-+#define AT91C_AC97C_CHID7_NONE (0x0 << 12) /**< (AC97C) No data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID7_CA (0x1 << 12) /**< (AC97C) Channel A data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID7_CB (0x2 << 12) /**< (AC97C) Channel B data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID7_CC (0x3 << 12) /**< (AC97C) Channel C data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID8 (0x7 << 15) /**< (AC97C) Channel Id for the input slot 8 */
-+#define AT91C_AC97C_CHID8_NONE (0x0 << 15) /**< (AC97C) No data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID8_CA (0x1 << 15) /**< (AC97C) Channel A data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID8_CB (0x2 << 15) /**< (AC97C) Channel B data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID8_CC (0x3 << 15) /**< (AC97C) Channel C data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID9 (0x7 << 18) /**< (AC97C) Channel Id for the input slot 9 */
-+#define AT91C_AC97C_CHID9_NONE (0x0 << 18) /**< (AC97C) No data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID9_CA (0x1 << 18) /**< (AC97C) Channel A data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID9_CB (0x2 << 18) /**< (AC97C) Channel B data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID9_CC (0x3 << 18) /**< (AC97C) Channel C data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID10 (0x7 << 21) /**< (AC97C) Channel Id for the input slot 10 */
-+#define AT91C_AC97C_CHID10_NONE (0x0 << 21) /**< (AC97C) No data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID10_CA (0x1 << 21) /**< (AC97C) Channel A data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID10_CB (0x2 << 21) /**< (AC97C) Channel B data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID10_CC (0x3 << 21) /**< (AC97C) Channel C data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID11 (0x7 << 24) /**< (AC97C) Channel Id for the input slot 11 */
-+#define AT91C_AC97C_CHID11_NONE (0x0 << 24) /**< (AC97C) No data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID11_CA (0x1 << 24) /**< (AC97C) Channel A data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID11_CB (0x2 << 24) /**< (AC97C) Channel B data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID11_CC (0x3 << 24) /**< (AC97C) Channel C data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID12 (0x7 << 27) /**< (AC97C) Channel Id for the input slot 12 */
-+#define AT91C_AC97C_CHID12_NONE (0x0 << 27) /**< (AC97C) No data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID12_CA (0x1 << 27) /**< (AC97C) Channel A data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID12_CB (0x2 << 27) /**< (AC97C) Channel B data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID12_CC (0x3 << 27) /**< (AC97C) Channel C data will be transmitted during this slot */
-+/* --- Register AC97C_OCA */
-+#define AT91C_AC97C_CHID3 (0x7 << 0 ) /**< (AC97C) Channel Id for the input slot 3 */
-+#define AT91C_AC97C_CHID3_NONE 0x0 /**< (AC97C) No data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID3_CA 0x1 /**< (AC97C) Channel A data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID3_CB 0x2 /**< (AC97C) Channel B data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID3_CC 0x3 /**< (AC97C) Channel C data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID4 (0x7 << 3 ) /**< (AC97C) Channel Id for the input slot 4 */
-+#define AT91C_AC97C_CHID4_NONE (0x0 << 3) /**< (AC97C) No data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID4_CA (0x1 << 3) /**< (AC97C) Channel A data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID4_CB (0x2 << 3) /**< (AC97C) Channel B data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID4_CC (0x3 << 3) /**< (AC97C) Channel C data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID5 (0x7 << 6 ) /**< (AC97C) Channel Id for the input slot 5 */
-+#define AT91C_AC97C_CHID5_NONE (0x0 << 6) /**< (AC97C) No data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID5_CA (0x1 << 6) /**< (AC97C) Channel A data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID5_CB (0x2 << 6) /**< (AC97C) Channel B data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID5_CC (0x3 << 6) /**< (AC97C) Channel C data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID6 (0x7 << 9 ) /**< (AC97C) Channel Id for the input slot 6 */
-+#define AT91C_AC97C_CHID6_NONE (0x0 << 9) /**< (AC97C) No data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID6_CA (0x1 << 9) /**< (AC97C) Channel A data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID6_CB (0x2 << 9) /**< (AC97C) Channel B data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID6_CC (0x3 << 9) /**< (AC97C) Channel C data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID7 (0x7 << 12) /**< (AC97C) Channel Id for the input slot 7 */
-+#define AT91C_AC97C_CHID7_NONE (0x0 << 12) /**< (AC97C) No data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID7_CA (0x1 << 12) /**< (AC97C) Channel A data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID7_CB (0x2 << 12) /**< (AC97C) Channel B data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID7_CC (0x3 << 12) /**< (AC97C) Channel C data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID8 (0x7 << 15) /**< (AC97C) Channel Id for the input slot 8 */
-+#define AT91C_AC97C_CHID8_NONE (0x0 << 15) /**< (AC97C) No data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID8_CA (0x1 << 15) /**< (AC97C) Channel A data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID8_CB (0x2 << 15) /**< (AC97C) Channel B data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID8_CC (0x3 << 15) /**< (AC97C) Channel C data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID9 (0x7 << 18) /**< (AC97C) Channel Id for the input slot 9 */
-+#define AT91C_AC97C_CHID9_NONE (0x0 << 18) /**< (AC97C) No data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID9_CA (0x1 << 18) /**< (AC97C) Channel A data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID9_CB (0x2 << 18) /**< (AC97C) Channel B data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID9_CC (0x3 << 18) /**< (AC97C) Channel C data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID10 (0x7 << 21) /**< (AC97C) Channel Id for the input slot 10 */
-+#define AT91C_AC97C_CHID10_NONE (0x0 << 21) /**< (AC97C) No data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID10_CA (0x1 << 21) /**< (AC97C) Channel A data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID10_CB (0x2 << 21) /**< (AC97C) Channel B data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID10_CC (0x3 << 21) /**< (AC97C) Channel C data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID11 (0x7 << 24) /**< (AC97C) Channel Id for the input slot 11 */
-+#define AT91C_AC97C_CHID11_NONE (0x0 << 24) /**< (AC97C) No data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID11_CA (0x1 << 24) /**< (AC97C) Channel A data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID11_CB (0x2 << 24) /**< (AC97C) Channel B data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID11_CC (0x3 << 24) /**< (AC97C) Channel C data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID12 (0x7 << 27) /**< (AC97C) Channel Id for the input slot 12 */
-+#define AT91C_AC97C_CHID12_NONE (0x0 << 27) /**< (AC97C) No data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID12_CA (0x1 << 27) /**< (AC97C) Channel A data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID12_CB (0x2 << 27) /**< (AC97C) Channel B data will be transmitted during this slot */
-+#define AT91C_AC97C_CHID12_CC (0x3 << 27) /**< (AC97C) Channel C data will be transmitted during this slot */
-+/* --- Register AC97C_CARHR */
-+#define AT91C_AC97C_RDATA (0xFFFFF << 0 ) /**< (AC97C) Receive data */
-+/* --- Register AC97C_CATHR */
-+#define AT91C_AC97C_TDATA (0xFFFFF << 0 ) /**< (AC97C) Transmit data */
-+/* --- Register AC97C_CASR */
-+#define AT91C_AC97C_TXRDY (0x1 << 0 ) /**< (AC97C) */
-+#define AT91C_AC97C_TXEMPTY (0x1 << 1 ) /**< (AC97C) */
-+#define AT91C_AC97C_UNRUN (0x1 << 2 ) /**< (AC97C) */
-+#define AT91C_AC97C_RXRDY (0x1 << 4 ) /**< (AC97C) */
-+#define AT91C_AC97C_OVRUN (0x1 << 5 ) /**< (AC97C) */
-+#define AT91C_AC97C_ENDTX (0x1 << 10) /**< (AC97C) */
-+#define AT91C_AC97C_TXBUFE (0x1 << 11) /**< (AC97C) */
-+#define AT91C_AC97C_ENDRX (0x1 << 14) /**< (AC97C) */
-+#define AT91C_AC97C_RXBUFF (0x1 << 15) /**< (AC97C) */
-+/* --- Register AC97C_CAMR */
-+#define AT91C_AC97C_TXRDY (0x1 << 0 ) /**< (AC97C) */
-+#define AT91C_AC97C_TXEMPTY (0x1 << 1 ) /**< (AC97C) */
-+#define AT91C_AC97C_UNRUN (0x1 << 2 ) /**< (AC97C) */
-+#define AT91C_AC97C_RXRDY (0x1 << 4 ) /**< (AC97C) */
-+#define AT91C_AC97C_OVRUN (0x1 << 5 ) /**< (AC97C) */
-+#define AT91C_AC97C_ENDTX (0x1 << 10) /**< (AC97C) */
-+#define AT91C_AC97C_TXBUFE (0x1 << 11) /**< (AC97C) */
-+#define AT91C_AC97C_ENDRX (0x1 << 14) /**< (AC97C) */
-+#define AT91C_AC97C_RXBUFF (0x1 << 15) /**< (AC97C) */
-+#define AT91C_AC97C_SIZE (0x3 << 16) /**< (AC97C) */
-+#define AT91C_AC97C_SIZE_20_BITS (0x0 << 16) /**< (AC97C) Data size is 20 bits */
-+#define AT91C_AC97C_SIZE_18_BITS (0x1 << 16) /**< (AC97C) Data size is 18 bits */
-+#define AT91C_AC97C_SIZE_16_BITS (0x2 << 16) /**< (AC97C) Data size is 16 bits */
-+#define AT91C_AC97C_SIZE_10_BITS (0x3 << 16) /**< (AC97C) Data size is 10 bits */
-+#define AT91C_AC97C_CEM (0x1 << 18) /**< (AC97C) */
-+#define AT91C_AC97C_CEN (0x1 << 21) /**< (AC97C) */
-+#define AT91C_AC97C_PDCEN (0x1 << 22) /**< (AC97C) */
-+/* --- Register AC97C_CBRHR */
-+#define AT91C_AC97C_RDATA (0xFFFFF << 0 ) /**< (AC97C) Receive data */
-+/* --- Register AC97C_CBTHR */
-+#define AT91C_AC97C_TDATA (0xFFFFF << 0 ) /**< (AC97C) Transmit data */
-+/* --- Register AC97C_CBSR */
-+#define AT91C_AC97C_TXRDY (0x1 << 0 ) /**< (AC97C) */
-+#define AT91C_AC97C_TXEMPTY (0x1 << 1 ) /**< (AC97C) */
-+#define AT91C_AC97C_UNRUN (0x1 << 2 ) /**< (AC97C) */
-+#define AT91C_AC97C_RXRDY (0x1 << 4 ) /**< (AC97C) */
-+#define AT91C_AC97C_OVRUN (0x1 << 5 ) /**< (AC97C) */
-+/* --- Register AC97C_CBMR */
-+#define AT91C_AC97C_TXRDY (0x1 << 0 ) /**< (AC97C) */
-+#define AT91C_AC97C_TXEMPTY (0x1 << 1 ) /**< (AC97C) */
-+#define AT91C_AC97C_UNRUN (0x1 << 2 ) /**< (AC97C) */
-+#define AT91C_AC97C_RXRDY (0x1 << 4 ) /**< (AC97C) */
-+#define AT91C_AC97C_OVRUN (0x1 << 5 ) /**< (AC97C) */
-+#define AT91C_AC97C_SIZE (0x3 << 16) /**< (AC97C) */
-+#define AT91C_AC97C_SIZE_20_BITS (0x0 << 16) /**< (AC97C) Data size is 20 bits */
-+#define AT91C_AC97C_SIZE_18_BITS (0x1 << 16) /**< (AC97C) Data size is 18 bits */
-+#define AT91C_AC97C_SIZE_16_BITS (0x2 << 16) /**< (AC97C) Data size is 16 bits */
-+#define AT91C_AC97C_SIZE_10_BITS (0x3 << 16) /**< (AC97C) Data size is 10 bits */
-+#define AT91C_AC97C_CEM (0x1 << 18) /**< (AC97C) */
-+#define AT91C_AC97C_CEN (0x1 << 21) /**< (AC97C) */
-+/* --- Register AC97C_CORHR */
-+#define AT91C_AC97C_SDATA (0xFFFF << 0 ) /**< (AC97C) Status Data */
-+/* --- Register AC97C_COTHR */
-+#define AT91C_AC97C_CDATA (0xFFFF << 0 ) /**< (AC97C) Command Data */
-+#define AT91C_AC97C_CADDR (0x7F << 16) /**< (AC97C) COdec control register index */
-+#define AT91C_AC97C_READ (0x1 << 23) /**< (AC97C) Read/Write command */
-+/* --- Register AC97C_COSR */
-+#define AT91C_AC97C_TXRDY (0x1 << 0 ) /**< (AC97C) */
-+#define AT91C_AC97C_TXEMPTY (0x1 << 1 ) /**< (AC97C) */
-+#define AT91C_AC97C_UNRUN (0x1 << 2 ) /**< (AC97C) */
-+#define AT91C_AC97C_RXRDY (0x1 << 4 ) /**< (AC97C) */
-+/* --- Register AC97C_COMR */
-+#define AT91C_AC97C_TXRDY (0x1 << 0 ) /**< (AC97C) */
-+#define AT91C_AC97C_TXEMPTY (0x1 << 1 ) /**< (AC97C) */
-+#define AT91C_AC97C_UNRUN (0x1 << 2 ) /**< (AC97C) */
-+#define AT91C_AC97C_RXRDY (0x1 << 4 ) /**< (AC97C) */
-+/* --- Register AC97C_SR */
-+#define AT91C_AC97C_SOF (0x1 << 0 ) /**< (AC97C) */
-+#define AT91C_AC97C_WKUP (0x1 << 1 ) /**< (AC97C) */
-+#define AT91C_AC97C_COEVT (0x1 << 2 ) /**< (AC97C) */
-+#define AT91C_AC97C_CAEVT (0x1 << 3 ) /**< (AC97C) */
-+#define AT91C_AC97C_CBEVT (0x1 << 4 ) /**< (AC97C) */
-+/* --- Register AC97C_IER */
-+#define AT91C_AC97C_SOF (0x1 << 0 ) /**< (AC97C) */
-+#define AT91C_AC97C_WKUP (0x1 << 1 ) /**< (AC97C) */
-+#define AT91C_AC97C_COEVT (0x1 << 2 ) /**< (AC97C) */
-+#define AT91C_AC97C_CAEVT (0x1 << 3 ) /**< (AC97C) */
-+#define AT91C_AC97C_CBEVT (0x1 << 4 ) /**< (AC97C) */
-+/* --- Register AC97C_IDR */
-+#define AT91C_AC97C_SOF (0x1 << 0 ) /**< (AC97C) */
-+#define AT91C_AC97C_WKUP (0x1 << 1 ) /**< (AC97C) */
-+#define AT91C_AC97C_COEVT (0x1 << 2 ) /**< (AC97C) */
-+#define AT91C_AC97C_CAEVT (0x1 << 3 ) /**< (AC97C) */
-+#define AT91C_AC97C_CBEVT (0x1 << 4 ) /**< (AC97C) */
-+/* --- Register AC97C_IMR */
-+#define AT91C_AC97C_SOF (0x1 << 0 ) /**< (AC97C) */
-+#define AT91C_AC97C_WKUP (0x1 << 1 ) /**< (AC97C) */
-+#define AT91C_AC97C_COEVT (0x1 << 2 ) /**< (AC97C) */
-+#define AT91C_AC97C_CAEVT (0x1 << 3 ) /**< (AC97C) */
-+#define AT91C_AC97C_CBEVT (0x1 << 4 ) /**< (AC97C) */
-+
-+#endif /* __AC97C_H */
-diff -urNp linux-2.6.28-at91/arch/arm/mach-at91/Kconfig linux-2.6.28-at91-ronetix/arch/arm/mach-at91/Kconfig
---- linux-2.6.28-at91/arch/arm/mach-at91/Kconfig 2009-01-12 15:59:27.000000000 +0100
-+++ linux-2.6.28-at91-ronetix/arch/arm/mach-at91/Kconfig 2009-01-12 16:00:41.000000000 +0100
-@@ -280,6 +280,13 @@ config MACH_NEOCORE926
- help
- Select this if you are using the Adeneo Neocore 926 board.
-
-+config MACH_PM9263
-+ bool "Ronetix PM9263 Evaluation Kit"
-+ depends on ARCH_AT91SAM9263
-+ help
-+ Select this if you are using Ronetix's PM9263 board.
-+ <http://ronetix.at/starter_kit_9263.html>
-+
- endif
-
- # ----------------------------------------------------------
-@@ -347,13 +354,13 @@ comment "AT91 Board Options"
-
- config MTD_AT91_DATAFLASH_CARD
- bool "Enable DataFlash Card support"
-- depends on (ARCH_AT91RM9200DK || MACH_AT91RM9200EK || MACH_AT91SAM9260EK || MACH_AT91SAM9261EK || MACH_AT91SAM9263EK || MACH_AT91SAM9G20EK || MACH_ECBAT91 || MACH_SAM9_L9260 || MACH_AT91CAP9ADK || MACH_TOTEMNOVA || MACH_NEOCORE926)
-+ depends on (ARCH_AT91RM9200DK || MACH_AT91RM9200EK || MACH_AT91SAM9260EK || MACH_AT91SAM9261EK || MACH_AT91SAM9263EK || MACH_AT91SAM9G20EK || MACH_ECBAT91 || MACH_SAM9_L9260 || MACH_AT91CAP9ADK || MACH_TOTEMNOVA || MACH_NEOCORE926 || MACH_PM9263)
- help
- Enable support for the DataFlash card.
-
- config MTD_NAND_ATMEL_BUSWIDTH_16
- bool "Enable 16-bit data bus interface to NAND flash"
-- depends on (MACH_AT91SAM9260EK || MACH_AT91SAM9261EK || MACH_AT91SAM9263EK || MACH_AT91SAM9G20EK || MACH_AT91CAP9ADK)
-+ depends on (MACH_AT91SAM9260EK || MACH_AT91SAM9261EK || MACH_AT91SAM9263EK || MACH_AT91SAM9G20EK || MACH_AT91CAP9ADK || MACH_PM9263)
- help
- On AT91SAM926x boards both types of NAND flash can be present
- (8 and 16 bit data bus width).
-diff -urNp linux-2.6.28-at91/arch/arm/mach-at91/Makefile linux-2.6.28-at91-ronetix/arch/arm/mach-at91/Makefile
---- linux-2.6.28-at91/arch/arm/mach-at91/Makefile 2009-01-12 15:59:27.000000000 +0100
-+++ linux-2.6.28-at91-ronetix/arch/arm/mach-at91/Makefile 2009-01-12 16:00:41.000000000 +0100
-@@ -54,6 +54,7 @@ obj-$(CONFIG_MACH_USB_A9263) += board-us
- obj-$(CONFIG_MACH_CSB737) += board-csb737.o
- obj-$(CONFIG_MACH_TOTEMNOVA) += board-totemnova.o
- obj-$(CONFIG_MACH_NEOCORE926) += board-neocore926.o
-+obj-$(CONFIG_MACH_PM9263) += board-pm9263.o
-
- # AT91SAM9RL board-specific support
- obj-$(CONFIG_MACH_AT91SAM9RLEK) += board-sam9rlek.o
-diff -urNp linux-2.6.28-at91/drivers/pcmcia/at91_cf.c linux-2.6.28-at91-ronetix/drivers/pcmcia/at91_cf.c
---- linux-2.6.28-at91/drivers/pcmcia/at91_cf.c 2009-01-12 15:59:27.000000000 +0100
-+++ linux-2.6.28-at91-ronetix/drivers/pcmcia/at91_cf.c 2009-01-12 16:00:42.000000000 +0100
-@@ -27,7 +27,7 @@
-
- #if defined(CONFIG_ARCH_AT91RM9200)
- #include <mach/at91rm9200_mc.h>
--#elif defined(CONFIG_ARCH_AT91SAM9260)
-+#elif defined(CONFIG_ARCH_AT91SAM9260) || defined(CONFIG_ARCH_AT91SAM9263)
- #include <mach/at91sam9_smc.h>
- #else
- #error "Unsupported AT91 processor"
-@@ -138,7 +138,8 @@ at91_cf_set_socket(struct pcmcia_socket
- }
-
- /* toggle reset if needed */
-- gpio_set_value(cf->board->rst_pin, s->flags & SS_RESET);
-+ if (cf->board->rst_pin)
-+ gpio_set_value(cf->board->rst_pin, s->flags & SS_RESET);
-
- pr_debug("%s: Vcc %d, io_irq %d, flags %04x csc %04x\n",
- driver_name, s->Vcc, s->io_irq, s->flags, s->csc_mask);
-diff -urNp linux-2.6.28-at91/drivers/pcmcia/Kconfig linux-2.6.28-at91-ronetix/drivers/pcmcia/Kconfig
---- linux-2.6.28-at91/drivers/pcmcia/Kconfig 2009-01-12 15:59:27.000000000 +0100
-+++ linux-2.6.28-at91-ronetix/drivers/pcmcia/Kconfig 2009-01-12 16:00:42.000000000 +0100
-@@ -270,7 +270,7 @@ config BFIN_CFPCMCIA
-
- config AT91_CF
- tristate "AT91 CompactFlash Controller"
-- depends on PCMCIA && (ARCH_AT91RM9200 || ARCH_AT91SAM9260)
-+ depends on PCMCIA && (ARCH_AT91RM9200 || ARCH_AT91SAM9260 || ARCH_AT91SAM9263)
- help
- Say Y here to support the CompactFlash controller on AT91 chips.
- Or choose M to compile the driver as a module named "at91_cf".
-diff -urNp linux-2.6.28-at91/sound/arm/at91-ac97.c.rej linux-2.6.28-at91-ronetix/sound/arm/at91-ac97.c.rej
---- linux-2.6.28-at91/sound/arm/at91-ac97.c.rej 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.28-at91-ronetix/sound/arm/at91-ac97.c.rej 2009-01-12 16:00:43.000000000 +0100
-@@ -0,0 +1,702 @@
-+***************
-+*** 0 ****
-+--- 1,699 ----
-++ /* drivers/sound/arm/at91-ac97c.c
-++ *
-++ * Driver for the Atmel AC97 Controller
-++ *
-++ * Copyright (C) 2005 Atmel Norway
-++ */
-++
-++ #define CAPTURE 0
-++
-++ #define EXTRA_DEBUG 0
-++
-++ #undef DEBUG
-++ #include <linux/platform_device.h>
-++ #include <linux/module.h>
-++ #include <linux/init.h>
-++ #include <linux/interrupt.h>
-++ #include <linux/delay.h>
-++ #include <linux/clk.h>
-++ #include <linux/atmel_pdc.h>
-++
-++ //#include <sound/driver.h>
-++ #include <sound/core.h>
-++ #include <sound/initval.h>
-++ #include <sound/pcm.h>
-++ #include <sound/ac97_codec.h>
-++
-++ #include <asm/io.h>
-++ #include <mach/hardware.h>
-++ #include <asm/cacheflush.h>
-++
-++ #include <mach/gpio.h>
-++ #include <mach/at91_ac97c.h>
-++ #include <mach/board.h>
-++
-++ #define platform_num_resources(dev) ((dev)->num_resources)
-++ #define platform_resource_start(dev, i) ((dev)->resource[(i)].start)
-++ #define platform_resource_end(dev, i) ((dev)->resource[(i)].end)
-++ #define platform_resource_flags(dev, i) ((dev)->resource[(i)].flags)
-++ #define platform_resource_len(dev, i) \
-++ (platform_resource_end((dev), (i)) - \
-++ platform_resource_start((dev), (i)) + 1)
-++
-++
-++ /* module parameters */
-++ static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;
-++ static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;
-++ static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;
-++
-++ module_param_array(index, int, NULL, 0444);
-++ MODULE_PARM_DESC(index, "Index value for AC97 controller");
-++ module_param_array(id, charp, NULL, 0444);
-++ MODULE_PARM_DESC(id, "ID string for AC97 controller");
-++ module_param_array(enable, bool, NULL, 0444);
-++ MODULE_PARM_DESC(enable, "Enable AC97 controller");
-++
-++ typedef struct at91_ac97 {
-++ spinlock_t lock;
-++ void *regs;
-++ int period;
-++ struct clk *ac97_clk;
-++ struct snd_pcm_substream *playback_substream;
-++ struct snd_card *card;
-++ struct snd_pcm *pcm;
-++ struct snd_ac97 *ac97;
-++ struct snd_ac97_bus *ac97_bus;
-++ int irq;
-++ struct platform_device *pdev;
-++ u8 reset_pin;
-++ } at91_ac97_t;
-++
-++ #define get_chip(card) ((at91_ac97_t *)(card)->private_data)
-++
-++ #define ac97c_writel(chip, reg, val) \
-++ writel((val), (chip)->regs + AC97C_##reg)
-++
-++ #define ac97c_readl(chip, reg) \
-++ readl((chip)->regs + AC97C_##reg)
-++
-++ // PIO management functions
-++ void at91_ac97c_drive_reset(at91_ac97_t *chip, unsigned int value)
-++ {
-++ if (chip->reset_pin)
-++ at91_set_gpio_value(chip->reset_pin, value);
-++ }
-++
-++
-++ static const char driver_name[] = "at91-ac97";
-++
-++ /* PCM part */
-++
-++ static struct snd_pcm_hardware snd_at91_ac97_hw = {
-++ .info = (SNDRV_PCM_INFO_INTERLEAVED
-++ | SNDRV_PCM_INFO_MMAP
-++ | SNDRV_PCM_INFO_MMAP_VALID
-++ | SNDRV_PCM_INFO_BLOCK_TRANSFER),
-++ .formats = SNDRV_PCM_FMTBIT_S16_LE,
-++ .rates = SNDRV_PCM_RATE_CONTINUOUS,
-++ .rate_min = 8000,
-++ .rate_max = 48000,
-++ .channels_min = 2,
-++ .channels_max = 2,
-++ .buffer_bytes_max = 256*1024,
-++ .period_bytes_min = 1024,
-++ .period_bytes_max = 4*1024,
-++ .periods_min = 1,
-++ .periods_max = 64,
-++ };
-++
-++ static int snd_at91_ac97_playback_open(struct snd_pcm_substream *substream)
-++ {
-++ at91_ac97_t *chip = snd_pcm_substream_chip(substream);
-++ struct snd_pcm_runtime *runtime = substream->runtime;
-++
-++ runtime->hw = snd_at91_ac97_hw;
-++ chip->playback_substream = substream;
-++ chip->period = 0;
-++
-++ snd_printd(KERN_DEBUG "%s : snd_at91_ac97_playback_open\n\r", driver_name);
-++
-++ return 0;
-++ }
-++
-++ static int snd_at91_ac97_playback_close(struct snd_pcm_substream *substream)
-++ {
-++ at91_ac97_t *chip = snd_pcm_substream_chip(substream);
-++
-++ chip->playback_substream = NULL;
-++ return 0;
-++ }
-++
-++ static int snd_at91_ac97_hw_params(struct snd_pcm_substream *substream,
-++ struct snd_pcm_hw_params *hw_params)
-++ {
-++ int err;
-++
-++ err = snd_pcm_lib_malloc_pages(substream,
-++ params_buffer_bytes(hw_params));
-++ return err;
-++ }
-++
-++ static int snd_at91_ac97_hw_free(struct snd_pcm_substream *substream)
-++ {
-++
-++ snd_pcm_lib_free_pages(substream);
-++
-++ return 0;
-++ }
-++
-++ static int snd_at91_ac97_playback_prepare(struct snd_pcm_substream *substream)
-++ {
-++ at91_ac97_t *chip = snd_pcm_substream_chip(substream);
-++ struct snd_pcm_runtime *runtime = substream->runtime;
-++ int block_size = frames_to_bytes(runtime, runtime->period_size);
-++ unsigned long word = 0;
-++
-++ //clean_dcache_region(runtime->dma_area, block_size * 2);
-++ snd_printd(KERN_DEBUG "%s : block_size = %d\n\r", driver_name, block_size);
-++
-++ /* Assign slots to channels */
-++ switch (substream->runtime->channels) {
-++ /* TODO: Support more than two channels */
-++ case 1:
-++ word |= AT91C_AC97C_CHID3_CA;
-++ break;
-++ case 2:
-++ default:
-++ /* Assign Left and Right slots (3,4) to Channel A */
-++ word |= AT91C_AC97C_CHID3_CA | AT91C_AC97C_CHID4_CA;
-++ break;
-++ }
-++
-++ ac97c_writel(chip, OCA, word);
-++
-++ /*
-++ * Configure sample format and size.
-++ * FIXME: Avoid conflicts with capture channel.
-++ */
-++ word = AT91C_AC97C_PDCEN | AT91C_AC97C_SIZE_16_BITS;
-++
-++ switch (runtime->format){
-++ case SNDRV_PCM_FORMAT_S16_BE:
-++ word |= AT91C_AC97C_CEM;
-++ break;
-++ case SNDRV_PCM_FORMAT_S16_LE:
-++ default:
-++ break;
-++ }
-++
-++ ac97c_writel(chip, CAMR, word);
-++
-++ /* Set variable rate if needed */
-++ if ( runtime->rate != 48000 ){
-++ word = ac97c_readl(chip, MR);
-++ word |= AT91C_AC97C_VRA;
-++ ac97c_writel(chip, MR, word);
-++ } else {
-++ /* Clear Variable Rate Bit */
-++ word = ac97c_readl(chip, MR);
-++ word &= ~AT91C_AC97C_VRA;
-++ ac97c_writel(chip, MR, word);
-++ }
-++
-++ /* Set rate */
-++ snd_ac97_set_rate(chip->ac97, AC97_PCM_FRONT_DAC_RATE, runtime->rate);
-++
-++ snd_printd(KERN_DEBUG
-++ "%s : dma_addr = %x\n\r"
-++ " : dma_area = %p\n\r"
-++ " : dma_bytes = %d\n\r",
-++ driver_name, runtime->dma_addr,
-++ runtime->dma_area, runtime->dma_bytes);
-++
-++ /* Initialize and start the PDC */
-++ writel(runtime->dma_addr, chip->regs + ATMEL_PDC_TPR);
-++ writel(block_size / 2, chip->regs + ATMEL_PDC_TCR);
-++ writel(runtime->dma_addr + block_size, chip->regs + ATMEL_PDC_TNPR);
-++ writel(block_size / 2, chip->regs + ATMEL_PDC_TNCR);
-++
-++ /* Enable Channel A interrupts */
-++ ac97c_writel(chip, IER, AT91C_AC97C_CAEVT);
-++
-++ snd_printd(KERN_DEBUG "%s : snd_at91_ac97_playback_prepare\n\r", driver_name);
-++
-++ return 0;
-++ }
-++
-++ static int at91_ac97_trigger(struct snd_pcm_substream *substream, int cmd)
-++ {
-++ at91_ac97_t *chip = snd_pcm_substream_chip(substream);
-++ unsigned long camr, ptcr = 0, flags;
-++ int err = 0;
-++
-++ spin_lock_irqsave(&chip->lock, flags);
-++ camr = ac97c_readl(chip, CAMR);
-++
-++ switch (cmd) {
-++ case SNDRV_PCM_TRIGGER_START:
-++ camr |= (AT91C_AC97C_CEN | AT91C_AC97C_ENDTX);
-++ ptcr = ATMEL_PDC_TXTEN;
-++ break;
-++ case SNDRV_PCM_TRIGGER_STOP:
-++ camr &= ~(AT91C_AC97C_CEN | AT91C_AC97C_ENDTX);
-++ ptcr = ATMEL_PDC_TXTDIS;
-++ break;
-++ default:
-++ err = -EINVAL;
-++ break;
-++ }
-++
-++ ac97c_writel(chip, CAMR, camr);
-++ writel(ptcr, chip->regs + ATMEL_PDC_PTCR);
-++
-++ spin_unlock_irqrestore(&chip->lock, flags);
-++
-++ snd_printd(KERN_DEBUG "%s : snd_at91_ac97_trigger\n\r", driver_name);
-++
-++ return err;
-++ }
-++
-++ static snd_pcm_uframes_t snd_at91_ac97_pointer(struct snd_pcm_substream *substream)
-++ {
-++ at91_ac97_t *chip = snd_pcm_substream_chip(substream);
-++ struct snd_pcm_runtime *runtime = substream->runtime;
-++ snd_pcm_uframes_t pos;
-++ unsigned long bytes;
-++
-++ bytes = readl(chip->regs + ATMEL_PDC_TPR) - runtime->dma_addr;
-++
-++ pos = bytes_to_frames(runtime, bytes);
-++ if (pos >= runtime->buffer_size)
-++ pos -= runtime->buffer_size;
-++
-++ snd_printd(KERN_DEBUG "%s : snd_at91_ac97_pointer\n\r", driver_name);
-++
-++ return pos;
-++ }
-++
-++ static struct snd_pcm_ops at91_ac97_playback_ops = {
-++ .open = snd_at91_ac97_playback_open,
-++ .close = snd_at91_ac97_playback_close,
-++ .ioctl = snd_pcm_lib_ioctl,
-++ .hw_params = snd_at91_ac97_hw_params,
-++ .hw_free = snd_at91_ac97_hw_free,
-++ .prepare = snd_at91_ac97_playback_prepare,
-++ .trigger = at91_ac97_trigger,
-++ .pointer = snd_at91_ac97_pointer,
-++ };
-++
-++ #if CAPTURE
-++ static struct snd_pcm_ops at91_ac97_capture_ops = {
-++ .open = snd_at91_ac97_playback_open,
-++ .close = snd_at91_ac97_playback_close,
-++ .ioctl = snd_pcm_lib_ioctl,
-++ .hw_params = snd_at91_ac97_hw_params,
-++ .hw_free = snd_at91_ac97_hw_free,
-++ .prepare = snd_at91_ac97_playback_prepare,
-++ .trigger = at91_ac97_trigger,
-++ .pointer = snd_at91_ac97_pointer,
-++ };
-++ #endif
-++
-++ static struct ac97_pcm at91_ac97_pcm_defs[] __devinitdata = {
-++ /* Playback */
-++ {
-++ .exclusive = 1,
-++ .r = { {
-++ .slots = ((1 << AC97_SLOT_PCM_LEFT)
-++ | (1 << AC97_SLOT_PCM_RIGHT)),
-++ } },
-++ },
-++ #if CAPTURE
-++ { /* Mic in */
-++ .stream = 1,
-++ .exclusive = 1,
-++ .r = {
-++ [0] = {
-++ .slots = (1 << AC97_SLOT_MIC),
-++ },
-++ },
-++ }
-++ #endif
-++ };
-++
-++ static int __devinit snd_at91_ac97_pcm_new(at91_ac97_t *chip)
-++ {
-++ struct snd_pcm *pcm;
-++ int err;
-++
-++ err = snd_ac97_pcm_assign(chip->ac97_bus, 1, at91_ac97_pcm_defs);
-++ if (err)
-++ return err;
-++
-++ err = snd_pcm_new(chip->card, "Atmel AC97", 0, 1, 0, &pcm);
-++ if (err)
-++ return err;
-++
-++ snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV,
-++ &chip->pdev->dev,
-++ 128 * 1024, 256 * 1024);
-++
-++ snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &at91_ac97_playback_ops);
-++ #if CAPTURE
-++ snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &at91_ac97_capture_ops);
-++ #endif
-++ pcm->private_data = chip;
-++ pcm->info_flags = 0;
-++ strcpy(pcm->name, "Atmel AC97");
-++ chip->pcm = pcm;
-++
-++ return 0;
-++ }
-++
-++ /* Mixer part */
-++ static int snd_at91_ac97_mixer_new(at91_ac97_t *chip)
-++ {
-++ int err;
-++ struct snd_ac97_template template;
-++
-++ memset(&template, 0, sizeof(template));
-++ template.private_data = chip;
-++ template.num = 0;
-++ template.addr = 0;
-++ err = snd_ac97_mixer(chip->ac97_bus, &template, &chip->ac97);
-++
-++ return err;
-++ }
-++
-++
-++ static irqreturn_t snd_at91_ac97_interrupt(int irq, void *dev_id)
-++ {
-++ at91_ac97_t *chip = dev_id;
-++ unsigned long status;
-++ unsigned long dummy;
-++
-++ status = ac97c_readl(chip, SR);
-++
-++ if (status & AT91C_AC97C_CAEVT) {
-++ struct snd_pcm_runtime *runtime;
-++ int offset, next_period, block_size;
-++ unsigned long casr;
-++
-++ runtime = chip->playback_substream->runtime;
-++ block_size = frames_to_bytes(runtime, runtime->period_size);
-++
-++ casr = ac97c_readl(chip, CASR);
-++
-++ if (casr & AT91C_AC97C_ENDTX) {
-++ chip->period++;
-++ if (chip->period == runtime->periods)
-++ chip->period = 0;
-++ next_period = chip->period + 1;
-++ if (next_period == runtime->periods)
-++ next_period = 0;
-++
-++ offset = block_size * next_period;
-++
-++ writel(runtime->dma_addr + offset, chip->regs + ATMEL_PDC_TNPR);
-++ writel(block_size / 2, chip->regs + ATMEL_PDC_TNCR);
-++
-++ snd_pcm_period_elapsed(chip->playback_substream);
-++ } else {
-++ printk(KERN_WARNING
-++ "Spurious AC97A interrupt, status = 0x%08lx\n",
-++ (unsigned long)casr);
-++ }
-++ } else {
-++ printk(KERN_WARNING
-++ "Spurious AC97 interrupt, status = 0x%08lx\n",
-++ status);
-++ }
-++
-++ dummy = ac97c_readl(chip, SR);
-++
-++ return IRQ_HANDLED;
-++ }
-++
-++
-++ /* CODEC part */
-++
-++ static void snd_at91_ac97_hard_reset(at91_ac97_t *chip)
-++ {
-++ // Enable AC97 Controller.
-++ // Perform a cold (hard) reset of the AC97 codec.
-++ ac97c_writel(chip, MR, 0);
-++ ac97c_writel(chip, MR, AT91C_AC97C_ENA);
-++
-++ at91_ac97c_drive_reset(chip, 0);
-++ udelay(1);
-++ at91_ac97c_drive_reset(chip, 1);
-++ udelay(1);
-++ }
-++
-++
-++ static void snd_at91_ac97_write(struct snd_ac97 *ac97, unsigned short reg,
-++ unsigned short val)
-++ {
-++ at91_ac97_t *chip = ac97->private_data;
-++ unsigned long word;
-++ int timeout = 0x100;
-++
-++ snd_printd(KERN_DEBUG "%s : Writing codec register 0x%x = 0x%x\n\r", driver_name, reg, val);
-++
-++ word = (reg & 0x7f) << 16 | val;
-++
-++ do {
-++ if (ac97c_readl(chip, COSR) & AT91C_AC97C_TXRDY) {
-++ ac97c_writel(chip, COTHR, word);
-++ return;
-++ }
-++ udelay(1);
-++ } while (--timeout);
-++
-++ snd_printk(KERN_WARNING "at91-ac97: codec write timeout\n\r");
-++ }
-++
-++ static unsigned short snd_at91_ac97_read(struct snd_ac97 *ac97,
-++ unsigned short reg)
-++ {
-++ at91_ac97_t *chip = ac97->private_data;
-++ unsigned long word;
-++ int timeout = 0x100;
-++
-++
-++ word = (0x80 | (reg & 0x7f)) << 16;
-++
-++ do {
-++ if (ac97c_readl(chip, COSR) & AT91C_AC97C_TXRDY){
-++ ac97c_writel(chip, COTHR, word);
-++ break;
-++ }
-++ udelay(1);
-++ } while (--timeout);
-++
-++ if (!timeout)
-++ goto timed_out;
-++
-++ timeout = 0x100;
-++
-++ do {
-++ if (ac97c_readl(chip, COSR) & AT91C_AC97C_RXRDY){
-++ unsigned short val = (unsigned short) ac97c_readl(chip, CORHR);
-++ return val;
-++ }
-++ udelay(1);
-++ } while (--timeout);
-++
-++ if (!timeout)
-++ goto timed_out1;
-++
-++ timed_out:
-++ snd_printk(KERN_WARNING "at91-ac97: codec read timeout\n\r");
-++ return 0xffff;
-++
-++ timed_out1:
-++ #if EXTRA_DEBUG
-++ snd_printk(KERN_WARNING "at91-ac97: codec read timeout 1\n\r");
-++ #endif
-++ return 0xffff;
-++ }
-++
-++ static void snd_at91_ac97_warm_reset(struct snd_ac97 *ac97)
-++ {
-++ at91_ac97_t *chip = ac97->private_data;
-++ volatile unsigned int mr = ac97c_readl(chip, MR);
-++
-++ mr |= AT91C_AC97C_WRST;
-++
-++ ac97c_writel(chip, MR, mr);
-++ udelay(1);
-++
-++ mr &= ~AT91C_AC97C_WRST;
-++ ac97c_writel(chip, MR, mr);
-++ }
-++
-++ static void snd_at91_ac97_destroy(struct snd_card *card)
-++ {
-++ at91_ac97_t *chip = get_chip(card);
-++
-++ #if 0
-++ // Disable AC97 Controller
-++ ac97c_writel(chip, MR, 0);
-++
-++ // Disable AC97 Controller clock
-++ if (chip->ac97_clk) clk_disable(chip->ac97_clk);
-++ #endif
-++ if (chip->irq != -1) {
-++ free_irq(chip->irq, chip);
-++ chip->irq = -1;
-++ }
-++ if (chip->regs) {
-++ iounmap(chip->regs);
-++ chip->regs = NULL;
-++ }
-++ }
-++
-++ static int __devinit snd_at91_ac97_create(struct snd_card *card,
-++ struct platform_device *pdev)
-++ {
-++ static struct snd_ac97_bus_ops ops = {
-++ .write = snd_at91_ac97_write,
-++ .read = snd_at91_ac97_read,
-++ .reset = snd_at91_ac97_warm_reset,
-++ };
-++
-++ at91_ac97_t *chip = get_chip(card);
-++ int irq, err = 0;
-++
-++ card->private_free = snd_at91_ac97_destroy;
-++
-++ spin_lock_init(&chip->lock);
-++ chip->card = card;
-++ chip->pdev = pdev;
-++ chip->irq = -1;
-++
-++ if (!(platform_resource_flags(pdev, 0) & IORESOURCE_MEM)
-++ || !(platform_resource_flags(pdev, 1) & IORESOURCE_IRQ))
-++ return -ENODEV;
-++
-++ irq = platform_resource_start(pdev, 1);
-++
-++ err = request_irq(irq, snd_at91_ac97_interrupt, 0, "ac97", chip);
-++ if (err) {
-++ snd_printk(KERN_WARNING "unable to request IRQ%d\n", irq);
-++ return err;
-++ }
-++
-++ chip->irq = irq;
-++ #if EXTRA_DEBUG
-++ snd_printk(KERN_INFO "AC97C regs = %08X \n", platform_resource_start(pdev, 0));
-++ snd_printk(KERN_INFO "AC97C irq = %d \n",irq);
-++ #endif
-++
-++ chip->regs = ioremap(platform_resource_start(pdev, 0),
-++ platform_resource_len(pdev, 0));
-++ if (!chip->regs) {
-++ snd_printk(KERN_WARNING "unable to remap AC97C io memory\n");
-++ return -ENOMEM;
-++ }
-++
-++ snd_card_set_dev(card, &pdev->dev);
-++
-++ err = snd_ac97_bus(card, 0, &ops, chip, &chip->ac97_bus);
-++
-++ return err;
-++ }
-++
-++ static int __devinit snd_at91_ac97_probe(struct platform_device *pdev)
-++ {
-++ static int dev;
-++ struct atmel_ac97_data *pdata = pdev->dev.platform_data;
-++ struct snd_card *card;
-++ at91_ac97_t *chip;
-++ int err;
-++
-++ if (dev >= SNDRV_CARDS)
-++ return -ENODEV;
-++ if (!enable[dev]) {
-++ dev++;
-++ return -ENOENT;
-++ }
-++ card = snd_card_new(index[dev], id[dev], THIS_MODULE,
-++ sizeof(at91_ac97_t));
-++ if (!card)
-++ return -ENOMEM;
-++ chip = get_chip(card);
-++
-++ err = snd_at91_ac97_create(card, pdev);
-++ if (err)
-++ goto out_free_card;
-++
-++ // Enable AC97 Controller clock
-++ chip->reset_pin = pdata->reset_pin;
-++ chip->ac97_clk = clk_get(NULL, "ac97_clk");
-++ if(!chip->ac97_clk)
-++ goto out_free_card;
-++
-++ clk_enable(chip->ac97_clk);
-++
-++ // Perform a codec hard reset.
-++ // This also enables the AC97 Controller.
-++ snd_at91_ac97_hard_reset(chip);
-++
-++ err = snd_at91_ac97_mixer_new(chip);
-++ if (err)
-++ goto out_free_card;
-++
-++ err = snd_at91_ac97_pcm_new(chip);
-++ if (err)
-++ goto out_free_card;
-++
-++
-++ strcpy(card->driver, "ac97c");
-++ strcpy(card->shortname, "Atmel AC97");
-++ sprintf(card->longname, "Atmel AC97 Controller at %#lx, irq %i",
-++ (unsigned long) platform_resource_start(pdev, 0), (int) chip->irq);
-++
-++ err = snd_card_register(card);
-++ if (err)
-++ goto out_free_card;
-++
-++ dev_set_drvdata(&pdev->dev, card);
-++ dev++;
-++ return 0;
-++
-++ out_free_card:
-++ snd_card_free(card);
-++ return err;
-++ }
-++
-++ static int __devexit snd_at91_ac97_remove(struct platform_device *pdev)
-++ {
-++ struct snd_card *card = dev_get_drvdata(&pdev->dev);
-++ at91_ac97_t *chip;
-++
-++
-++ if (! card) return 0;
-++
-++ chip = get_chip(card);
-++
-++ snd_card_free(card);
-++
-++ // Disable AC97 Controller
-++ ac97c_writel(chip, MR, 0);
-++
-++ // Disable AC97 Controller clock
-++ clk_disable(chip->ac97_clk);
-++
-++ dev_set_drvdata(&pdev->dev, NULL);
-++
-++ return 0;
-++ }
-++
-++ static struct platform_driver at91_ac97_driver =
-++ {
-++ .probe = snd_at91_ac97_probe,
-++ .remove = __devexit_p(snd_at91_ac97_remove),
-++ .driver =
-++ {
-++ .name = "ac97c",
-++ }
-++ ,
-++ };
-++
-++ static int __init at91_ac97_init(void)
-++ {
-++ return platform_driver_register(&at91_ac97_driver);
-++ }
-++
-++ static void __exit at91_ac97_exit(void)
-++ {
-++ platform_driver_unregister(&at91_ac97_driver);
-++ }
-++
-++ module_init(at91_ac97_init);
-++ module_exit(at91_ac97_exit);
-++
-++ MODULE_LICENSE("GPL");
-++ MODULE_DESCRIPTION("Driver for Atmel AC97 Controller");
-++ MODULE_AUTHOR("Atmel");
-diff -urNp linux-2.6.28-at91/sound/arm/Kconfig linux-2.6.28-at91-ronetix/sound/arm/Kconfig
---- linux-2.6.28-at91/sound/arm/Kconfig 2009-01-12 15:59:32.000000000 +0100
-+++ linux-2.6.28-at91-ronetix/sound/arm/Kconfig 2009-01-12 16:00:42.000000000 +0100
-@@ -59,5 +59,14 @@ config SND_AT91_AC97
- Say Y or M if you want to support any AC97 codec attached to
- the SAM926X AC97 Controller.
-
-+config SND_AT91_AC97
-+ tristate "AC97 Controller driver for SAM926X familly from ATMEL"
-+ depends on SND && ARCH_AT91SAM9263
-+ select SND_PCM
-+ select SND_AC97_CODEC
-+ help
-+ Say Y or M if you want to support any AC97 codec attached to
-+ the SAM926X AC97 Controller.
-+
- endif # SND_ARM
-
-diff -urNp linux-2.6.28-at91/sound/arm/Kconfig.orig linux-2.6.28-at91-ronetix/sound/arm/Kconfig.orig
---- linux-2.6.28-at91/sound/arm/Kconfig.orig 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.28-at91-ronetix/sound/arm/Kconfig.orig 2009-01-12 16:00:31.000000000 +0100
-@@ -0,0 +1,63 @@
-+# ALSA ARM drivers
-+
-+menuconfig SND_ARM
-+ bool "ARM sound devices"
-+ depends on ARM
-+ default y
-+ help
-+ Support for sound devices specific to ARM architectures.
-+ Drivers that are implemented on ASoC can be found in
-+ "ALSA for SoC audio support" section.
-+
-+if SND_ARM
-+
-+config SND_SA11XX_UDA1341
-+ tristate "SA11xx UDA1341TS driver (iPaq H3600)"
-+ depends on ARCH_SA1100 && L3
-+ select SND_PCM
-+ help
-+ Say Y here if you have a Compaq iPaq H3x00 handheld computer
-+ and want to use its Philips UDA 1341 audio chip.
-+
-+ To compile this driver as a module, choose M here: the module
-+ will be called snd-sa11xx-uda1341.
-+
-+config SND_ARMAACI
-+ tristate "ARM PrimeCell PL041 AC Link support"
-+ depends on ARM_AMBA
-+ select SND_PCM
-+ select SND_AC97_CODEC
-+
-+config SND_PXA2XX_PCM
-+ tristate
-+ select SND_PCM
-+
-+config SND_PXA2XX_LIB
-+ tristate
-+ select SND_AC97_CODEC if SND_PXA2XX_LIB_AC97
-+
-+config SND_PXA2XX_LIB_AC97
-+ bool
-+
-+config SND_PXA2XX_AC97
-+ tristate "AC97 driver for the Intel PXA2xx chip"
-+ depends on ARCH_PXA
-+ select SND_PXA2XX_PCM
-+ select SND_AC97_CODEC
-+ select SND_PXA2XX_LIB
-+ select SND_PXA2XX_LIB_AC97
-+ help
-+ Say Y or M if you want to support any AC97 codec attached to
-+ the PXA2xx AC97 interface.
-+
-+config SND_AT91_AC97
-+ tristate "AC97 Controller driver for SAM926X familly from ATMEL"
-+ depends on SND && ARCH_AT91
-+ select SND_PCM
-+ select SND_AC97_CODEC
-+ help
-+ Say Y or M if you want to support any AC97 codec attached to
-+ the SAM926X AC97 Controller.
-+
-+endif # SND_ARM
-+
-diff -urNp linux-2.6.28-at91/sound/arm/Makefile.orig linux-2.6.28-at91-ronetix/sound/arm/Makefile.orig
---- linux-2.6.28-at91/sound/arm/Makefile.orig 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.28-at91-ronetix/sound/arm/Makefile.orig 2009-01-12 16:00:31.000000000 +0100
-@@ -0,0 +1,23 @@
-+#
-+# Makefile for ALSA
-+#
-+
-+obj-$(CONFIG_SND_SA11XX_UDA1341) += snd-sa11xx-uda1341.o
-+snd-sa11xx-uda1341-objs := sa11xx-uda1341.o
-+
-+obj-$(CONFIG_SND_ARMAACI) += snd-aaci.o
-+snd-aaci-objs := aaci.o devdma.o
-+
-+obj-$(CONFIG_SND_PXA2XX_PCM) += snd-pxa2xx-pcm.o
-+snd-pxa2xx-pcm-objs := pxa2xx-pcm.o
-+
-+obj-$(CONFIG_SND_PXA2XX_LIB) += snd-pxa2xx-lib.o
-+snd-pxa2xx-lib-y := pxa2xx-pcm-lib.o
-+snd-pxa2xx-lib-$(CONFIG_SND_PXA2XX_LIB_AC97) += pxa2xx-ac97-lib.o
-+
-+obj-$(CONFIG_SND_PXA2XX_AC97) += snd-pxa2xx-ac97.o
-+snd-pxa2xx-ac97-objs := pxa2xx-ac97.o
-+
-+obj-$(CONFIG_SND_AT91_AC97) += snd-at91-ac97.o
-+snd-at91-ac97-objs := at91-ac97.o
-+
-diff -urNp linux-2.6.28-at91/sound/arm/Makefile.rej linux-2.6.28-at91-ronetix/sound/arm/Makefile.rej
---- linux-2.6.28-at91/sound/arm/Makefile.rej 1970-01-01 01:00:00.000000000 +0100
-+++ linux-2.6.28-at91-ronetix/sound/arm/Makefile.rej 2009-01-12 16:00:42.000000000 +0100
-@@ -0,0 +1,12 @@
-+***************
-+*** 17,19 ****
-+
-+ obj-$(CONFIG_SND_PXA2XX_AC97) += snd-pxa2xx-ac97.o
-+ snd-pxa2xx-ac97-objs := pxa2xx-ac97.o
-+--- 17,22 ----
-+
-+ obj-$(CONFIG_SND_PXA2XX_AC97) += snd-pxa2xx-ac97.o
-+ snd-pxa2xx-ac97-objs := pxa2xx-ac97.o
-++
-++ obj-$(CONFIG_SND_AT91_AC97) += snd-at91-ac97.o
-++ snd-at91-ac97-objs := at91-ac97.o