diff options
| author | Sergey Lapin <slapin@ossfans.org> | 2009-05-14 17:06:59 +0400 |
|---|---|---|
| committer | Sergey Lapin <slapin@ossfans.org> | 2009-05-14 18:40:34 +0400 |
| commit | 84feccc2c58e52d9b7936670cb82da9e809eb781 (patch) | |
| tree | 88deaf388d129700c0743eaa8825c3e152dc5f43 /recipes | |
| parent | 3fd24860b796db3baf0af24eed91f86220fc9bff (diff) | |
linux: added 2.6.30-rc4
Diffstat (limited to 'recipes')
5 files changed, 2230 insertions, 0 deletions
diff --git a/recipes/linux/linux-2.6.29+2.6.30-rc4/afeb9260/0001-SRAM-TX-buffers-implementation-from-atmel-to-fix-TX.patch b/recipes/linux/linux-2.6.29+2.6.30-rc4/afeb9260/0001-SRAM-TX-buffers-implementation-from-atmel-to-fix-TX.patch new file mode 100644 index 0000000000..09351e3a4b --- /dev/null +++ b/recipes/linux/linux-2.6.29+2.6.30-rc4/afeb9260/0001-SRAM-TX-buffers-implementation-from-atmel-to-fix-TX.patch @@ -0,0 +1,310 @@ +From 9cb64ca668c31a2ee3836946e32b352f3219ba1d Mon Sep 17 00:00:00 2001 +From: Sergey Lapin <slapin@ossfans.org> +Date: Fri, 4 Jul 2008 01:52:39 +0400 +Subject: [PATCH] SRAM TX buffers implementation from atmel to fix TX underrun errors + +Signed-off-by: Sergey Lapin <slapin@ossfans.org> +--- + arch/arm/mach-at91/at91sam9260_devices.c | 7 ++ + drivers/net/Kconfig | 6 ++ + drivers/net/macb.c | 108 ++++++++++++++++++++++-------- + drivers/net/macb.h | 7 ++- + 4 files changed, 99 insertions(+), 29 deletions(-) + +diff --git a/arch/arm/mach-at91/at91sam9260_devices.c b/arch/arm/mach-at91/at91sam9260_devices.c +index d74c9ac..e4227be 100644 +--- a/arch/arm/mach-at91/at91sam9260_devices.c ++++ b/arch/arm/mach-at91/at91sam9260_devices.c +@@ -141,6 +141,13 @@ static struct resource eth_resources[] = { + .end = AT91SAM9260_ID_EMAC, + .flags = IORESOURCE_IRQ, + }, ++#if defined(CONFIG_MACB_TX_SRAM) ++ [2] = { ++ .start = AT91SAM9260_SRAM1_BASE, ++ .end = AT91SAM9260_SRAM1_BASE + AT91SAM9260_SRAM1_SIZE - 1, ++ .flags = IORESOURCE_MEM, ++ }, ++#endif + }; + + static struct platform_device at91sam9260_eth_device = { +diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig +index 214a92d..8b85428 100644 +--- a/drivers/net/Kconfig ++++ b/drivers/net/Kconfig +@@ -228,6 +228,12 @@ config MACB + To compile this driver as a module, choose M here: the module + will be called macb. + ++config MACB_TX_SRAM ++ bool "Use internal SRAM for EMAC (Ethernet) transmit buffers" ++ depends on (ARCH_AT91SAM9263 || ARCH_AT91SAM9260) && MACB ++ help ++ Select this if you are using internal SRAM for EMAC transmit buffers. ++ + source "drivers/net/arm/Kconfig" + + config AX88796 +diff --git a/drivers/net/macb.c b/drivers/net/macb.c +index e82aee4..7d1167e 100644 +--- a/drivers/net/macb.c ++++ b/drivers/net/macb.c +@@ -33,22 +33,27 @@ + /* Make the IP header word-aligned (the ethernet header is 14 bytes) */ + #define RX_OFFSET 2 + +-#define TX_RING_SIZE 128 +-#define DEF_TX_RING_PENDING (TX_RING_SIZE - 1) +-#define TX_RING_BYTES (sizeof(struct dma_desc) * TX_RING_SIZE) ++#define TX_MAX_PKT_SIZE 1536 ++#define TX_DEFAULT_RING_SIZE 128 ++#define DEF_TX_RING_PENDING(bp) ((bp)->tx_ring_size - 1) ++ ++#define TX_RING_BYTES(bp) (sizeof(struct dma_desc) * \ ++ (bp)->tx_ring_size) + + #define TX_RING_GAP(bp) \ +- (TX_RING_SIZE - (bp)->tx_pending) ++ ((bp)->tx_ring_size - (bp)->tx_pending) ++ + #define TX_BUFFS_AVAIL(bp) \ + (((bp)->tx_tail <= (bp)->tx_head) ? \ + (bp)->tx_tail + (bp)->tx_pending - (bp)->tx_head : \ + (bp)->tx_tail - (bp)->tx_head - TX_RING_GAP(bp)) +-#define NEXT_TX(n) (((n) + 1) & (TX_RING_SIZE - 1)) + +-#define NEXT_RX(n) (((n) + 1) & (RX_RING_SIZE - 1)) ++#define NEXT_TX(bp, n) (((n) + 1) % ((bp)->tx_ring_size)) ++#define NEXT_RX(n) (((n) + 1) % (RX_RING_SIZE)) ++ + + /* minimum number of free TX descriptors before waking up TX process */ +-#define MACB_TX_WAKEUP_THRESH (TX_RING_SIZE / 4) ++#define MACB_TX_WAKEUP_THRESH(bp) ((bp)->tx_ring_size / 4) + + #define MACB_RX_INT_FLAGS (MACB_BIT(RCOMP) | MACB_BIT(RXUBR) \ + | MACB_BIT(ISR_ROVR)) +@@ -329,11 +334,11 @@ static void macb_tx(struct macb *bp) + head = bp->tx_head; + + /*Mark all the buffer as used to avoid sending a lost buffer*/ +- for (i = 0; i < TX_RING_SIZE; i++) ++ for (i = 0; i < bp->tx_ring_size; i++) + bp->tx_ring[i].ctrl = MACB_BIT(TX_USED); + + /* free transmit buffer in upper layer*/ +- for (tail = bp->tx_tail; tail != head; tail = NEXT_TX(tail)) { ++ for (tail = bp->tx_tail; tail != head; tail = NEXT_TX(bp, tail)) { + struct ring_info *rp = &bp->tx_skb[tail]; + struct sk_buff *skb = rp->skb; + +@@ -363,7 +368,7 @@ static void macb_tx(struct macb *bp) + return; + + head = bp->tx_head; +- for (tail = bp->tx_tail; tail != head; tail = NEXT_TX(tail)) { ++ for (tail = bp->tx_tail; tail != head; tail = NEXT_TX(bp, tail)) { + struct ring_info *rp = &bp->tx_skb[tail]; + struct sk_buff *skb = rp->skb; + u32 bufstat; +@@ -388,7 +393,7 @@ static void macb_tx(struct macb *bp) + + bp->tx_tail = tail; + if (netif_queue_stopped(bp->dev) && +- TX_BUFFS_AVAIL(bp) > MACB_TX_WAKEUP_THRESH) ++ TX_BUFFS_AVAIL(bp) > MACB_TX_WAKEUP_THRESH(bp)) + netif_wake_queue(bp->dev); + } + +@@ -418,6 +423,7 @@ static int macb_rx_frame(struct macb *bp, unsigned int first_frag, + } + + skb_reserve(skb, RX_OFFSET); ++ skb->dev = bp->dev; + skb->ip_summed = CHECKSUM_NONE; + skb_put(skb, len); + +@@ -635,8 +641,15 @@ static int macb_start_xmit(struct sk_buff *skb, struct net_device *dev) + + entry = bp->tx_head; + dev_dbg(&bp->pdev->dev, "Allocated ring entry %u\n", entry); +- mapping = dma_map_single(&bp->pdev->dev, skb->data, ++ if (bp->smem_start) { ++ mapping = bp->tx_ring[entry].addr; ++ memcpy(bp->tx_buffers + entry * TX_MAX_PKT_SIZE, ++ skb->data, len); ++ } else { ++ mapping = dma_map_single(&bp->pdev->dev, skb->data, + len, DMA_TO_DEVICE); ++ bp->tx_ring[entry].addr = mapping; ++ } + bp->tx_skb[entry].skb = skb; + bp->tx_skb[entry].mapping = mapping; + dev_dbg(&bp->pdev->dev, "Mapped skb data %p to DMA addr %08lx\n", +@@ -644,14 +657,13 @@ static int macb_start_xmit(struct sk_buff *skb, struct net_device *dev) + + ctrl = MACB_BF(TX_FRMLEN, len); + ctrl |= MACB_BIT(TX_LAST); +- if (entry == (TX_RING_SIZE - 1)) ++ if (entry == (bp->tx_ring_size - 1)) + ctrl |= MACB_BIT(TX_WRAP); + +- bp->tx_ring[entry].addr = mapping; + bp->tx_ring[entry].ctrl = ctrl; + wmb(); + +- entry = NEXT_TX(entry); ++ entry = NEXT_TX(bp, entry); + bp->tx_head = entry; + + macb_writel(bp, NCR, macb_readl(bp, NCR) | MACB_BIT(TSTART)); +@@ -678,7 +690,8 @@ static void macb_free_consistent(struct macb *bp) + bp->rx_ring = NULL; + } + if (bp->tx_ring) { +- dma_free_coherent(&bp->pdev->dev, TX_RING_BYTES, ++ if (!bp->smem_start) ++ dma_free_coherent(&bp->pdev->dev, TX_RING_BYTES(bp), + bp->tx_ring, bp->tx_ring_dma); + bp->tx_ring = NULL; + } +@@ -688,13 +701,16 @@ static void macb_free_consistent(struct macb *bp) + bp->rx_buffers, bp->rx_buffers_dma); + bp->rx_buffers = NULL; + } ++ ++ if (bp->smem_start && bp->tx_ring_dma) ++ release_mem_region(bp->tx_ring_dma, bp->smem_size); + } + + static int macb_alloc_consistent(struct macb *bp) + { + int size; + +- size = TX_RING_SIZE * sizeof(struct ring_info); ++ size = bp->tx_ring_size * sizeof(struct ring_info); + bp->tx_skb = kmalloc(size, GFP_KERNEL); + if (!bp->tx_skb) + goto out_err; +@@ -708,14 +724,30 @@ static int macb_alloc_consistent(struct macb *bp) + "Allocated RX ring of %d bytes at %08lx (mapped %p)\n", + size, (unsigned long)bp->rx_ring_dma, bp->rx_ring); + +- size = TX_RING_BYTES; +- bp->tx_ring = dma_alloc_coherent(&bp->pdev->dev, size, ++ if (bp->smem_start) { ++ if (request_mem_region(bp->smem_start, ++ bp->smem_size, "macb")) { ++ bp->tx_ring_dma = bp->smem_start; ++ } ++ bp->tx_ring = ioremap(bp->tx_ring_dma, bp->smem_size); ++ if (bp->tx_ring) { ++ bp->tx_buffers_dma = bp->tx_ring_dma + ++ TX_RING_BYTES(bp); ++ bp->tx_buffers = (char *) bp->tx_ring + ++ TX_RING_BYTES(bp); ++ } ++ } ++ ++ if (!bp->tx_ring) { ++ size = TX_RING_BYTES(bp); ++ bp->tx_ring = dma_alloc_coherent(&bp->pdev->dev, size, + &bp->tx_ring_dma, GFP_KERNEL); +- if (!bp->tx_ring) +- goto out_err; +- dev_dbg(&bp->pdev->dev, +- "Allocated TX ring of %d bytes at %08lx (mapped %p)\n", +- size, (unsigned long)bp->tx_ring_dma, bp->tx_ring); ++ if (!bp->tx_ring) ++ goto out_err; ++ dev_dbg(&bp->pdev->dev, ++ "Allocated TX ring of %d bytes at %08lx (mapped %p)\n", ++ size, (unsigned long)bp->tx_ring_dma, bp->tx_ring); ++ } + + size = RX_RING_SIZE * RX_BUFFER_SIZE; + bp->rx_buffers = dma_alloc_coherent(&bp->pdev->dev, size, +@@ -746,11 +778,14 @@ static void macb_init_rings(struct macb *bp) + } + bp->rx_ring[RX_RING_SIZE - 1].addr |= MACB_BIT(RX_WRAP); + +- for (i = 0; i < TX_RING_SIZE; i++) { +- bp->tx_ring[i].addr = 0; ++ for (i = 0; i < bp->tx_ring_size; i++) { ++ bp->tx_ring[i].addr = (bp->smem_start) ? ++ bp->tx_buffers_dma + i * TX_MAX_PKT_SIZE : 0; + bp->tx_ring[i].ctrl = MACB_BIT(TX_USED); ++ bp->tx_ring[i].addr = (u32) (bp->tx_buffers_dma + ++ (i * TX_MAX_PKT_SIZE)); + } +- bp->tx_ring[TX_RING_SIZE - 1].ctrl |= MACB_BIT(TX_WRAP); ++ bp->tx_ring[bp->tx_ring_size - 1].ctrl |= MACB_BIT(TX_WRAP); + + bp->rx_tail = bp->tx_head = bp->tx_tail = 0; + } +@@ -1100,6 +1135,7 @@ static int __init macb_probe(struct platform_device *pdev) + { + struct eth_platform_data *pdata; + struct resource *regs; ++ struct resource *smem; + struct net_device *dev; + struct macb *bp; + struct phy_device *phydev; +@@ -1205,7 +1241,23 @@ static int __init macb_probe(struct platform_device *pdev) + macb_writel(bp, USRIO, MACB_BIT(MII)); + #endif + +- bp->tx_pending = DEF_TX_RING_PENDING; ++ /* Check mem region for TX buffers */ ++ smem = platform_get_resource(pdev, IORESOURCE_MEM, 1); ++ if (smem) { ++ bp->smem_start = smem->start; ++ bp->smem_size = smem->end - smem->start + 1; ++ bp->tx_ring_size = bp->smem_size / (TX_MAX_PKT_SIZE + ++ sizeof(struct dma_desc)); ++ } ++ ++ /* if ring_size == 0 then mem is too ++ small and use standard memory */ ++ if (!bp->tx_ring_size) { ++ bp->smem_start = 0; ++ bp->tx_ring_size = TX_DEFAULT_RING_SIZE; ++ } ++ ++ bp->tx_pending = DEF_TX_RING_PENDING(bp); + + err = register_netdev(dev); + if (err) { +diff --git a/drivers/net/macb.h b/drivers/net/macb.h +index d3212f6..57f31ad 100644 +--- a/drivers/net/macb.h ++++ b/drivers/net/macb.h +@@ -364,11 +364,15 @@ struct macb { + unsigned int rx_tail; + struct dma_desc *rx_ring; + void *rx_buffers; +- ++ void *tx_buffers; ++ unsigned int tx_ring_size; + unsigned int tx_head, tx_tail; + struct dma_desc *tx_ring; + struct ring_info *tx_skb; + ++ unsigned int smem_start; ++ unsigned int smem_size; ++ + spinlock_t lock; + struct platform_device *pdev; + struct clk *pclk; +@@ -381,6 +385,7 @@ struct macb { + dma_addr_t rx_ring_dma; + dma_addr_t tx_ring_dma; + dma_addr_t rx_buffers_dma; ++ dma_addr_t tx_buffers_dma; + + unsigned int rx_pending, tx_pending; + +-- +1.5.6.5 + diff --git a/recipes/linux/linux-2.6.29+2.6.30-rc4/afeb9260/0002-RS-485-mode-of-USART1.patch b/recipes/linux/linux-2.6.29+2.6.30-rc4/afeb9260/0002-RS-485-mode-of-USART1.patch new file mode 100644 index 0000000000..a9ec3311da --- /dev/null +++ b/recipes/linux/linux-2.6.29+2.6.30-rc4/afeb9260/0002-RS-485-mode-of-USART1.patch @@ -0,0 +1,41 @@ +From d56f363a7fb9496d84819f1419145046ed04a03f Mon Sep 17 00:00:00 2001 +From: Sergey Lapin <slapin@ossfans.org> +Date: Fri, 4 Jul 2008 01:53:23 +0400 +Subject: [PATCH] RS-485 mode of USART1 + +Signed-off-by: Sergey Lapin <slapin@ossfans.org> +--- + drivers/serial/atmel_serial.c | 9 ++++++++- + 1 files changed, 8 insertions(+), 1 deletions(-) + +diff --git a/drivers/serial/atmel_serial.c b/drivers/serial/atmel_serial.c +index b3497d7..83ffe6a 100644 +--- a/drivers/serial/atmel_serial.c ++++ b/drivers/serial/atmel_serial.c +@@ -234,8 +234,12 @@ static void atmel_set_mctrl(struct uart_port *port, u_int mctrl) + mode = UART_GET_MR(port) & ~ATMEL_US_CHMODE; + if (mctrl & TIOCM_LOOP) + mode |= ATMEL_US_CHMODE_LOC_LOOP; +- else ++ else { ++ if (port->mapbase == AT91SAM9260_BASE_US1) ++ mode |= ATMEL_US_USMODE_RS485; ++ + mode |= ATMEL_US_CHMODE_NORMAL; ++ } + UART_PUT_MR(port, mode); + } + +@@ -1113,6 +1117,9 @@ static void atmel_set_termios(struct uart_port *port, struct ktermios *termios, + /* disable receiver and transmitter */ + UART_PUT_CR(port, ATMEL_US_TXDIS | ATMEL_US_RXDIS); + ++ if (port->mapbase == AT91SAM9260_BASE_US1) ++ mode |= ATMEL_US_USMODE_RS485; ++ + /* set the parity, stop bits and data size */ + UART_PUT_MR(port, mode); + +-- +1.5.6.5 + diff --git a/recipes/linux/linux-2.6.29+2.6.30-rc4/afeb9260/0004-AFEB9260-ASoC-driver.patch b/recipes/linux/linux-2.6.29+2.6.30-rc4/afeb9260/0004-AFEB9260-ASoC-driver.patch new file mode 100644 index 0000000000..14d5b4c194 --- /dev/null +++ b/recipes/linux/linux-2.6.29+2.6.30-rc4/afeb9260/0004-AFEB9260-ASoC-driver.patch @@ -0,0 +1,288 @@ +From 3c3cda9dad06e4fd30b3ed794881bdcc95131df8 Mon Sep 17 00:00:00 2001 +From: Sergey Lapin <slapin@ossfans.org> +Date: Sat, 18 Oct 2008 08:50:13 +0400 +Subject: [PATCH] AFEB9260 ASoC driver + + +Signed-off-by: Sergey Lapin <slapin@ossfans.org> +--- + arch/arm/mach-at91/board-afeb-9260v1.c | 4 + + sound/soc/atmel/Kconfig | 8 ++ + sound/soc/atmel/Makefile | 1 + + sound/soc/atmel/afeb9260.c | 217 ++++++++++++++++++++++++++++++++ + 4 files changed, 230 insertions(+), 0 deletions(-) + create mode 100644 sound/soc/atmel/afeb9260.c + +diff --git a/arch/arm/mach-at91/board-afeb-9260v1.c b/arch/arm/mach-at91/board-afeb-9260v1.c +index e263fda..e3f1c56 100644 +--- a/arch/arm/mach-at91/board-afeb-9260v1.c ++++ b/arch/arm/mach-at91/board-afeb-9260v1.c +@@ -164,6 +164,8 @@ static struct at91_mmc_data __initdata afeb9260_mmc_data = { + + static struct i2c_board_info __initdata afeb9260_i2c_devices[] = { + { ++ I2C_BOARD_INFO("tlv320aic23", 0x1a), ++ }, { + I2C_BOARD_INFO("fm3130", 0x68), + }, { + I2C_BOARD_INFO("24c64", 0x50), +@@ -196,6 +198,8 @@ static void __init afeb9260_board_init(void) + /* I2C */ + at91_add_device_i2c(afeb9260_i2c_devices, + ARRAY_SIZE(afeb9260_i2c_devices)); ++ /* Audio */ ++ at91_add_device_ssc(AT91SAM9260_ID_SSC, ATMEL_SSC_TX); + } + + MACHINE_START(AFEB9260, "Custom afeb9260 board") +diff --git a/sound/soc/atmel/Kconfig b/sound/soc/atmel/Kconfig +index a608d70..e720d5e 100644 +--- a/sound/soc/atmel/Kconfig ++++ b/sound/soc/atmel/Kconfig +@@ -41,3 +41,11 @@ config SND_AT32_SOC_PLAYPAQ_SLAVE + and FRAME signals on the PlayPaq. Unless you want to play + with the AT32 as the SSC master, you probably want to say N here, + as this will give you better sound quality. ++ ++config SND_AT91_SOC_AFEB9260 ++ tristate "SoC Audio support for AFEB9260 board" ++ depends on ARCH_AT91 && MACH_AFEB9260 && SND_ATMEL_SOC ++ select SND_ATMEL_SOC_SSC ++ select SND_SOC_TLV320AIC23 ++ help ++ Say Y here to support sound on AFEB9260 board. +diff --git a/sound/soc/atmel/Makefile b/sound/soc/atmel/Makefile +index f54a7cc..ac2df98 100644 +--- a/sound/soc/atmel/Makefile ++++ b/sound/soc/atmel/Makefile +@@ -13,3 +13,4 @@ snd-soc-playpaq-objs := playpaq_wm8510.o + + obj-$(CONFIG_SND_AT91_SOC_SAM9G20_WM8731) += snd-soc-sam9g20-wm8731.o + obj-$(CONFIG_SND_AT32_SOC_PLAYPAQ) += snd-soc-playpaq.o ++obj-$(CONFIG_SND_AT91_SOC_AFEB9260) += afeb9260.o +diff --git a/sound/soc/atmel/afeb9260.c b/sound/soc/atmel/afeb9260.c +new file mode 100644 +index 0000000..1514d8d +--- /dev/null ++++ b/sound/soc/atmel/afeb9260.c +@@ -0,0 +1,217 @@ ++/* ++ * afeb9260.c -- SoC audio for AFEB9260 ++ * ++ * Copyright (C) 2008 Sergey Lapin <slapin@ossfans.org> ++ * ++ * 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. ++ * ++ * 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., 51 Franklin St, Fifth Floor, Boston, MA ++ * 02110-1301 USA ++ * ++ */ ++ ++#include <linux/module.h> ++#include <linux/moduleparam.h> ++#include <linux/kernel.h> ++#include <linux/clk.h> ++#include <linux/platform_device.h> ++ ++#include <linux/atmel-ssc.h> ++#include <sound/core.h> ++#include <sound/pcm.h> ++#include <sound/pcm_params.h> ++#include <sound/soc.h> ++#include <sound/soc-dapm.h> ++ ++#include <asm/mach-types.h> ++#include <mach/hardware.h> ++#include <linux/gpio.h> ++ ++#include "../codecs/tlv320aic23.h" ++#include "atmel-pcm.h" ++#include "atmel_ssc_dai.h" ++ ++#define CODEC_CLOCK 12000000 ++ ++static int afeb9260_startup(struct snd_pcm_substream *substream) ++{ ++ return 1; ++} ++ ++static void afeb9260_shutdown(struct snd_pcm_substream *substream) ++{ ++ struct snd_soc_pcm_runtime *rtd = snd_pcm_substream_chip(substream); ++ ++ dev_dbg(rtd->socdev->dev, "shutdown"); ++} ++ ++static int afeb9260_hw_params(struct snd_pcm_substream *substream, ++ struct snd_pcm_hw_params *params) ++{ ++ struct snd_soc_pcm_runtime *rtd = substream->private_data; ++ struct snd_soc_dai *codec_dai = rtd->dai->codec_dai; ++ struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai; ++ int err; ++ ++ /* Set codec DAI configuration */ ++ err = snd_soc_dai_set_fmt(codec_dai, ++ SND_SOC_DAIFMT_I2S| ++ SND_SOC_DAIFMT_NB_IF | ++ SND_SOC_DAIFMT_CBM_CFM); ++ if (err < 0) { ++ printk(KERN_ERR "can't set codec DAI configuration\n"); ++ return err; ++ } ++ ++ /* Set cpu DAI configuration */ ++ err = snd_soc_dai_set_fmt(cpu_dai, ++ SND_SOC_DAIFMT_I2S | ++ SND_SOC_DAIFMT_NB_IF | ++ SND_SOC_DAIFMT_CBM_CFM); ++ if (err < 0) { ++ printk(KERN_ERR "can't set cpu DAI configuration\n"); ++ return err; ++ } ++ ++ /* Set the codec system clock for DAC and ADC */ ++ err = ++ snd_soc_dai_set_sysclk(codec_dai, 0, CODEC_CLOCK, SND_SOC_CLOCK_IN); ++ ++ if (err < 0) { ++ printk(KERN_ERR "can't set codec system clock\n"); ++ return err; ++ } ++ ++ return err; ++} ++ ++static struct snd_soc_ops afeb9260_ops = { ++ .startup = afeb9260_startup, ++ .hw_params = afeb9260_hw_params, ++ .shutdown = afeb9260_shutdown, ++}; ++ ++static const struct snd_soc_dapm_widget tlv320aic23_dapm_widgets[] = { ++ SND_SOC_DAPM_HP("Headphone Jack", NULL), ++ SND_SOC_DAPM_LINE("Line In", NULL), ++ SND_SOC_DAPM_MIC("Mic Jack", NULL), ++}; ++ ++static const struct snd_soc_dapm_route audio_map[] = { ++ {"Headphone Jack", NULL, "LHPOUT"}, ++ {"Headphone Jack", NULL, "RHPOUT"}, ++ ++ {"LLINEIN", NULL, "Line In"}, ++ {"RLINEIN", NULL, "Line In"}, ++ ++ {"MICIN", NULL, "Mic Jack"}, ++}; ++ ++static int afeb9260_tlv320aic23_init(struct snd_soc_codec *codec) ++{ ++ ++ /* Add osk5912 specific widgets */ ++ snd_soc_dapm_new_controls(codec, tlv320aic23_dapm_widgets, ++ ARRAY_SIZE(tlv320aic23_dapm_widgets)); ++ ++ /* Set up osk5912 specific audio path audio_map */ ++ snd_soc_dapm_add_routes(codec, audio_map, ARRAY_SIZE(audio_map)); ++ ++ snd_soc_dapm_enable_pin(codec, "Headphone Jack"); ++ snd_soc_dapm_enable_pin(codec, "Line In"); ++ snd_soc_dapm_enable_pin(codec, "Mic Jack"); ++ ++ snd_soc_dapm_sync(codec); ++ ++ return 0; ++} ++ ++/* Digital audio interface glue - connects codec <--> CPU */ ++static struct snd_soc_dai_link afeb9260_dai = { ++ .name = "TLV320AIC23", ++ .stream_name = "AIC23", ++ .cpu_dai = &atmel_ssc_dai[0], ++ .codec_dai = &tlv320aic23_dai, ++ .init = afeb9260_tlv320aic23_init, ++ .ops = &afeb9260_ops, ++}; ++ ++/* Audio machine driver */ ++static struct snd_soc_card snd_soc_machine_afeb9260 = { ++ .name = "AFEB9260", ++ .platform = &atmel_soc_platform, ++ .dai_link = &afeb9260_dai, ++ .num_links = 1, ++}; ++ ++/* Audio subsystem */ ++static struct snd_soc_device afeb9260_snd_devdata = { ++ .card = &snd_soc_machine_afeb9260, ++ .codec_dev = &soc_codec_dev_tlv320aic23, ++}; ++ ++static struct platform_device *afeb9260_snd_device; ++ ++static int __init afeb9260_soc_init(void) ++{ ++ int err; ++ struct device *dev; ++ struct atmel_ssc_info *ssc_p = afeb9260_dai.cpu_dai->private_data; ++ struct ssc_device *ssc = NULL; ++ ++ if (!(machine_is_afeb9260())) ++ return -ENODEV; ++ ++ ssc = ssc_request(0); ++ if (IS_ERR(ssc)) { ++ printk(KERN_ERR "ASoC: Failed to request SSC 0\n"); ++ err = PTR_ERR(ssc); ++ ssc = NULL; ++ goto err_ssc; ++ } ++ ssc_p->ssc = ssc; ++ ++ afeb9260_snd_device = platform_device_alloc("soc-audio", -1); ++ if (!afeb9260_snd_device) { ++ printk(KERN_ERR "ASoC: Platform device allocation failed\n"); ++ return -ENOMEM; ++ } ++ ++ platform_set_drvdata(afeb9260_snd_device, &afeb9260_snd_devdata); ++ afeb9260_snd_devdata.dev = &afeb9260_snd_device->dev; ++ err = platform_device_add(afeb9260_snd_device); ++ if (err) ++ goto err1; ++ ++ dev = &afeb9260_snd_device->dev; ++ ++ return 0; ++err1: ++ platform_device_del(afeb9260_snd_device); ++ platform_device_put(afeb9260_snd_device); ++err_ssc: ++ return err; ++ ++} ++ ++static void __exit afeb9260_soc_exit(void) ++{ ++ platform_device_unregister(afeb9260_snd_device); ++} ++ ++module_init(afeb9260_soc_init); ++module_exit(afeb9260_soc_exit); ++ ++MODULE_AUTHOR("Sergey Lapin <slapin@ossfans.org>"); ++MODULE_DESCRIPTION("ALSA SoC for AFEB9260"); ++MODULE_LICENSE("GPL"); ++ +-- +1.5.6.5 + diff --git a/recipes/linux/linux-2.6.29+2.6.30-rc4/afeb9260/defconfig b/recipes/linux/linux-2.6.29+2.6.30-rc4/afeb9260/defconfig new file mode 100644 index 0000000000..1d0ac1e96e --- /dev/null +++ b/recipes/linux/linux-2.6.29+2.6.30-rc4/afeb9260/defconfig @@ -0,0 +1,1559 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.30-rc4 +# Thu May 7 03:48:53 2009 +# +CONFIG_ARM=y +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +CONFIG_GENERIC_GPIO=y +CONFIG_GENERIC_TIME=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_MMU=y +# CONFIG_NO_IOPORT is not set +CONFIG_GENERIC_HARDIRQS=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_HAVE_LATENCYTOP_SUPPORT=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_RWSEM_GENERIC_SPINLOCK=y +# CONFIG_ARCH_HAS_ILOG2_U32 is not set +# CONFIG_ARCH_HAS_ILOG2_U64 is not set +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y +CONFIG_VECTORS_BASE=0xffff0000 +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# General setup +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_LOCK_KERNEL=y +CONFIG_INIT_ENV_ARG_LIMIT=32 +CONFIG_LOCALVERSION="" +# CONFIG_LOCALVERSION_AUTO is not set +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_TASKSTATS is not set +# CONFIG_AUDIT is not set + +# +# RCU Subsystem +# +CONFIG_CLASSIC_RCU=y +# CONFIG_TREE_RCU is not set +# CONFIG_PREEMPT_RCU is not set +# CONFIG_TREE_RCU_TRACE is not set +# CONFIG_PREEMPT_RCU_TRACE is not set +# CONFIG_IKCONFIG is not set +CONFIG_LOG_BUF_SHIFT=14 +# CONFIG_GROUP_SCHED is not set +# CONFIG_CGROUPS is not set +CONFIG_SYSFS_DEPRECATED=y +CONFIG_SYSFS_DEPRECATED_V2=y +# CONFIG_RELAY is not set +CONFIG_NAMESPACES=y +# CONFIG_UTS_NS is not set +# CONFIG_IPC_NS is not set +# CONFIG_USER_NS is not set +# CONFIG_PID_NS is not set +# CONFIG_NET_NS is not set +CONFIG_BLK_DEV_INITRD=y +CONFIG_INITRAMFS_SOURCE="" +CONFIG_RD_GZIP=y +CONFIG_RD_BZIP2=y +CONFIG_RD_LZMA=y +CONFIG_CC_OPTIMIZE_FOR_SIZE=y +CONFIG_SYSCTL=y +CONFIG_ANON_INODES=y +# CONFIG_EMBEDDED is not set +CONFIG_UID16=y +CONFIG_SYSCTL_SYSCALL=y +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_ALL is not set +# CONFIG_KALLSYMS_EXTRA_PASS is not set +# CONFIG_STRIP_ASM_SYMS is not set +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_TIMERFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_AIO=y +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_COMPAT_BRK=y +CONFIG_SLAB=y +# CONFIG_SLUB is not set +# CONFIG_SLOB is not set +# CONFIG_PROFILING is not set +# CONFIG_MARKERS is not set +CONFIG_HAVE_OPROFILE=y +# CONFIG_KPROBES is not set +CONFIG_HAVE_KPROBES=y +CONFIG_HAVE_KRETPROBES=y +CONFIG_HAVE_CLK=y +# CONFIG_SLOW_WORK is not set +CONFIG_HAVE_GENERIC_DMA_COHERENT=y +CONFIG_SLABINFO=y +CONFIG_RT_MUTEXES=y +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +# CONFIG_MODULE_FORCE_LOAD is not set +CONFIG_MODULE_UNLOAD=y +# CONFIG_MODULE_FORCE_UNLOAD is not set +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +CONFIG_BLOCK=y +# CONFIG_LBD is not set +# CONFIG_BLK_DEV_BSG is not set +# CONFIG_BLK_DEV_INTEGRITY is not set + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +CONFIG_IOSCHED_AS=y +# CONFIG_IOSCHED_DEADLINE is not set +# CONFIG_IOSCHED_CFQ is not set +CONFIG_DEFAULT_AS=y +# CONFIG_DEFAULT_DEADLINE is not set +# CONFIG_DEFAULT_CFQ is not set +# CONFIG_DEFAULT_NOOP is not set +CONFIG_DEFAULT_IOSCHED="anticipatory" +# CONFIG_FREEZER is not set + +# +# System Type +# +# CONFIG_ARCH_AAEC2000 is not set +# CONFIG_ARCH_INTEGRATOR is not set +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_VERSATILE is not set +CONFIG_ARCH_AT91=y +# CONFIG_ARCH_CLPS711X is not set +# CONFIG_ARCH_EBSA110 is not set +# CONFIG_ARCH_EP93XX is not set +# CONFIG_ARCH_GEMINI is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_NETX is not set +# CONFIG_ARCH_H720X is not set +# CONFIG_ARCH_IMX is not set +# CONFIG_ARCH_IOP13XX is not set +# CONFIG_ARCH_IOP32X is not set +# CONFIG_ARCH_IOP33X is not set +# CONFIG_ARCH_IXP23XX is not set +# CONFIG_ARCH_IXP2000 is not set +# CONFIG_ARCH_IXP4XX is not set +# CONFIG_ARCH_L7200 is not set +# CONFIG_ARCH_KIRKWOOD is not set +# CONFIG_ARCH_KS8695 is not set +# CONFIG_ARCH_NS9XXX is not set +# CONFIG_ARCH_LOKI is not set +# CONFIG_ARCH_MV78XX0 is not set +# CONFIG_ARCH_MXC is not set +# CONFIG_ARCH_ORION5X is not set +# CONFIG_ARCH_PNX4008 is not set +# CONFIG_ARCH_PXA is not set +# CONFIG_ARCH_MMP is not set +# CONFIG_ARCH_RPC is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_S3C2410 is not set +# CONFIG_ARCH_S3C64XX is not set +# CONFIG_ARCH_SHARK is not set +# CONFIG_ARCH_LH7A40X is not set +# CONFIG_ARCH_DAVINCI is not set +# CONFIG_ARCH_OMAP is not set +# CONFIG_ARCH_MSM is not set +# CONFIG_ARCH_W90X900 is not set + +# +# Atmel AT91 System-on-Chip +# +# CONFIG_ARCH_AT91RM9200 is not set +CONFIG_ARCH_AT91SAM9260=y +# CONFIG_ARCH_AT91SAM9261 is not set +# CONFIG_ARCH_AT91SAM9263 is not set +# CONFIG_ARCH_AT91SAM9RL is not set +# CONFIG_ARCH_AT91SAM9G20 is not set +# CONFIG_ARCH_AT91CAP9 is not set +# CONFIG_ARCH_AT91X40 is not set +CONFIG_AT91_PMC_UNIT=y + +# +# AT91SAM9260 Variants +# +# CONFIG_ARCH_AT91SAM9260_SAM9XE is not set + +# +# AT91SAM9260 / AT91SAM9XE Board Type +# +# CONFIG_MACH_AT91SAM9260EK is not set +# CONFIG_MACH_CAM60 is not set +# CONFIG_MACH_SAM9_L9260 is not set +CONFIG_MACH_AFEB9260=y +# CONFIG_MACH_USB_A9260 is not set +# CONFIG_MACH_QIL_A9260 is not set + +# +# AT91 Board Options +# + +# +# AT91 Feature Selections +# +CONFIG_AT91_PROGRAMMABLE_CLOCKS=y +CONFIG_AT91_TIMER_HZ=100 +CONFIG_AT91_EARLY_DBGU=y +# CONFIG_AT91_EARLY_USART0 is not set +# CONFIG_AT91_EARLY_USART1 is not set +# CONFIG_AT91_EARLY_USART2 is not set +# CONFIG_AT91_EARLY_USART3 is not set +# CONFIG_AT91_EARLY_USART4 is not set +# CONFIG_AT91_EARLY_USART5 is not set + +# +# Processor Type +# +CONFIG_CPU_32=y +CONFIG_CPU_ARM926T=y +CONFIG_CPU_32v5=y +CONFIG_CPU_ABRT_EV5TJ=y +CONFIG_CPU_PABRT_NOIFAR=y +CONFIG_CPU_CACHE_VIVT=y +CONFIG_CPU_COPY_V4WB=y +CONFIG_CPU_TLB_V4WBI=y +CONFIG_CPU_CP15=y +CONFIG_CPU_CP15_MMU=y + +# +# Processor Features +# +CONFIG_ARM_THUMB=y +# CONFIG_CPU_ICACHE_DISABLE is not set +# CONFIG_CPU_DCACHE_DISABLE is not set +# CONFIG_CPU_DCACHE_WRITETHROUGH is not set +# CONFIG_CPU_CACHE_ROUND_ROBIN is not set +# CONFIG_OUTER_CACHE is not set + +# +# Bus support +# +# CONFIG_PCI_SYSCALL is not set +# CONFIG_ARCH_SUPPORTS_MSI is not set +# CONFIG_PCCARD is not set + +# +# Kernel Features +# +# CONFIG_NO_HZ is not set +# CONFIG_HIGH_RES_TIMERS is not set +CONFIG_GENERIC_CLOCKEVENTS_BUILD=y +CONFIG_VMSPLIT_3G=y +# CONFIG_VMSPLIT_2G is not set +# CONFIG_VMSPLIT_1G is not set +CONFIG_PAGE_OFFSET=0xC0000000 +CONFIG_PREEMPT=y +CONFIG_HZ=100 +CONFIG_AEABI=y +CONFIG_OABI_COMPAT=y +CONFIG_ARCH_FLATMEM_HAS_HOLES=y +# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set +# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set +# CONFIG_HIGHMEM is not set +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_DISCONTIGMEM_MANUAL is not set +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +CONFIG_PAGEFLAGS_EXTENDED=y +CONFIG_SPLIT_PTLOCK_CPUS=4096 +# CONFIG_PHYS_ADDR_T_64BIT is not set +CONFIG_ZONE_DMA_FLAG=0 +CONFIG_VIRT_TO_BUS=y +CONFIG_UNEVICTABLE_LRU=y +CONFIG_HAVE_MLOCK=y +CONFIG_HAVE_MLOCKED_PAGE_BIT=y +# CONFIG_LEDS is not set +CONFIG_ALIGNMENT_TRAP=y + +# +# Boot options +# +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_CMDLINE="mem=64M console=ttyS0,115200 initrd=0x21100000,3145728 root=/dev/ram0 rw" +# CONFIG_XIP_KERNEL is not set +# CONFIG_KEXEC is not set + +# +# CPU Power Management +# +# CONFIG_CPU_IDLE is not set + +# +# Floating point emulation +# + +# +# At least one emulation must be selected +# +CONFIG_FPE_NWFPE=y +# CONFIG_FPE_NWFPE_XP is not set +# CONFIG_FPE_FASTFPE is not set +# CONFIG_VFP is not set + +# +# Userspace binary formats +# +CONFIG_BINFMT_ELF=y +# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set +CONFIG_HAVE_AOUT=y +# CONFIG_BINFMT_AOUT is not set +# CONFIG_BINFMT_MISC is not set + +# +# Power management options +# +# CONFIG_PM is not set +CONFIG_ARCH_SUSPEND_POSSIBLE=y +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_MMAP is not set +CONFIG_UNIX=y +# CONFIG_NET_KEY is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_FIB_HASH=y +CONFIG_IP_PNP=y +# CONFIG_IP_PNP_DHCP is not set +CONFIG_IP_PNP_BOOTP=y +# CONFIG_IP_PNP_RARP is not set +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE is not set +# CONFIG_ARPD is not set +# CONFIG_SYN_COOKIES is not set +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +# CONFIG_INET_XFRM_TUNNEL is not set +# CONFIG_INET_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_TRANSPORT is not set +# CONFIG_INET_XFRM_MODE_TUNNEL is not set +# CONFIG_INET_XFRM_MODE_BEET is not set +# CONFIG_INET_LRO is not set +CONFIG_INET_DIAG=y +CONFIG_INET_TCP_DIAG=y +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +# CONFIG_IPV6 is not set +# CONFIG_NETWORK_SECMARK is not set +# CONFIG_NETFILTER is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_BRIDGE is not set +# CONFIG_NET_DSA is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_IPX is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_ECONET is not set +# CONFIG_WAN_ROUTER is not set +# CONFIG_PHONET is not set +# CONFIG_NET_SCHED is not set +# CONFIG_DCB is not set + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_HAMRADIO is not set +# CONFIG_CAN is not set +# CONFIG_IRDA is not set +# CONFIG_BT is not set +# CONFIG_AF_RXRPC is not set +CONFIG_WIRELESS=y +# CONFIG_CFG80211 is not set +# CONFIG_WIRELESS_OLD_REGULATORY is not set +# CONFIG_WIRELESS_EXT is not set +# CONFIG_LIB80211 is not set +# CONFIG_MAC80211 is not set +# CONFIG_WIMAX is not set +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_FW_LOADER=y +CONFIG_FIRMWARE_IN_KERNEL=y +CONFIG_EXTRA_FIRMW |
