Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6b0c9351 authored by Hans-Christian Egtvedt's avatar Hans-Christian Egtvedt Committed by Haavard Skinnemoen
Browse files

avr32: at32ap700x: setup DMA for ABDAC in the machine code



This patch will adjust the setup the DMA controller for the Audio
Bistream DAC in the at32ap700x machine code. This setup matches the new
ALSA driver for the ABDAC.

Tested on ATSTK1006 + ATSTK1000.

This patch will setup the needed platform data for the Audio Bistream
DAC used by the Favr-32 board.

Signed-off-by: default avatarHans-Christian Egtvedt <hans-christian.egtvedt@atmel.com>
[haavard.skinnemoen@atmel.com: fold board code update]
Signed-off-by: default avatarHaavard Skinnemoen <haavard.skinnemoen@atmel.com>
parent b92efa9a
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -22,6 +22,8 @@
#include <linux/spi/spi.h>
#include <linux/spi/ads7846.h>

#include <sound/atmel-abdac.h>

#include <video/atmel_lcdc.h>

#include <asm/setup.h>
@@ -41,6 +43,9 @@ unsigned long at32_board_osc_rates[3] = {
/* Initialized by bootloader-specific startup code. */
struct tag *bootloader_tags __initdata;

static struct atmel_abdac_pdata __initdata abdac0_data = {
};

struct eth_addr {
	u8 addr[6];
};
@@ -326,7 +331,7 @@ static int __init favr32_init(void)

	spi1_board_info[0].irq = gpio_to_irq(GPIO_PIN_PB(3));

	set_abdac_rate(at32_add_device_abdac(0));
	set_abdac_rate(at32_add_device_abdac(0, &abdac0_data));

	at32_add_device_pwm(1 << atmel_pwm_bl_pdata.pwm_channel);
	at32_add_device_spi(1, spi1_board_info, ARRAY_SIZE(spi1_board_info));
+22 −7
Original line number Diff line number Diff line
@@ -26,6 +26,8 @@
#include <mach/portmux.h>
#include <mach/sram.h>

#include <sound/atmel-abdac.h>

#include <video/atmel_lcdc.h>

#include "clock.h"
@@ -2053,21 +2055,34 @@ static struct clk abdac0_sample_clk = {
	.index		= 6,
};

struct platform_device *__init at32_add_device_abdac(unsigned int id)
struct platform_device *__init
at32_add_device_abdac(unsigned int id, struct atmel_abdac_pdata *data)
{
	struct platform_device	*pdev;
	struct dw_dma_slave	*dws;
	u32			pin_mask;

	if (id != 0)
	if (id != 0 || !data)
		return NULL;

	pdev = platform_device_alloc("abdac", id);
	pdev = platform_device_alloc("atmel_abdac", id);
	if (!pdev)
		return NULL;

	if (platform_device_add_resources(pdev, abdac0_resource,
				ARRAY_SIZE(abdac0_resource)))
		goto err_add_resources;
		goto out_free_resources;

	dws = &data->dws;

	dws->dma_dev = &dw_dmac0_device.dev;
	dws->reg_width = DW_DMA_SLAVE_WIDTH_32BIT;
	dws->cfg_hi = DWC_CFGH_DST_PER(2);
	dws->cfg_lo &= ~(DWC_CFGL_HS_DST_POL | DWC_CFGL_HS_SRC_POL);

	if (platform_device_add_data(pdev, data,
				sizeof(struct atmel_abdac_pdata)))
		goto out_free_resources;

	pin_mask  = (1 << 20) | (1 << 22);	/* DATA1 & DATAN1 */
	pin_mask |= (1 << 21) | (1 << 23);	/* DATA0 & DATAN0 */
@@ -2080,7 +2095,7 @@ struct platform_device *__init at32_add_device_abdac(unsigned int id)
	platform_device_add(pdev);
	return pdev;

err_add_resources:
out_free_resources:
	platform_device_put(pdev);
	return NULL;
}
+5 −2
Original line number Diff line number Diff line
@@ -97,7 +97,10 @@ struct ac97c_platform_data {
struct platform_device *
at32_add_device_ac97c(unsigned int id, struct ac97c_platform_data *data);

struct platform_device *at32_add_device_abdac(unsigned int id);
struct atmel_abdac_pdata;
struct platform_device *
at32_add_device_abdac(unsigned int id, struct atmel_abdac_pdata *data);

struct platform_device *at32_add_device_psif(unsigned int id);

struct cf_platform_data {