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

Commit 7a82323d authored by Linus Torvalds's avatar Linus Torvalds
Browse files
* git://git.kernel.org/pub/scm/linux/kernel/git/hskinnemoen/avr32-2.6:
  avr32: some mmc/sd cleanups
  include/video/atmel_lcdc.h must #include <linux/workqueue.h>
  avr32: allow system timer to share interrupt to make OProfile work
  drivers/misc/atmel-ssc.c: Removed duplicated include
  avr32: Add platform data for AC97C platform device
  avr32: clean up mci platform code
  fix avr32 build errors
parents b0d8aa08 3c26e170
Loading
Loading
Loading
Loading
+18 −1
Original line number Diff line number Diff line
@@ -21,6 +21,8 @@

#include <asm/io.h>
#include <asm/setup.h>
#include <asm/atmel-mci.h>

#include <asm/arch/at32ap700x.h>
#include <asm/arch/board.h>
#include <asm/arch/init.h>
@@ -260,6 +262,21 @@ void __init setup_board(void)
	at32_setup_serial_console(0);
}

#ifndef CONFIG_BOARD_ATSTK100X_SW2_CUSTOM

/* MMC card detect requires MACB0 *NOT* be used */
#ifdef CONFIG_BOARD_ATSTK1002_SW6_CUSTOM
static struct mci_platform_data __initdata mci0_data = {
	.detect_pin	= GPIO_PIN_PC(14),	/* gpio30/sdcd */
	.wp_pin		= GPIO_PIN_PC(15),	/* gpio31/sdwp */
};
#define MCI_PDATA	&mci0_data
#else
#define MCI_PDATA	NULL
#endif	/* SW6 for sd{cd,wp} routing */

#endif	/* SW2 for MMC signal routing */

static int __init atstk1002_init(void)
{
	/*
@@ -309,7 +326,7 @@ static int __init atstk1002_init(void)
	at32_add_device_spi(1, spi1_board_info, ARRAY_SIZE(spi1_board_info));
#endif
#ifndef CONFIG_BOARD_ATSTK1002_SW2_CUSTOM
	at32_add_device_mci(0, NULL);
	at32_add_device_mci(0, MCI_PDATA);
#endif
#ifdef CONFIG_BOARD_ATSTK1002_SW5_CUSTOM
	set_hw_addr(at32_add_device_eth(1, &eth_data[1]));
+1 −1
Original line number Diff line number Diff line
@@ -154,7 +154,7 @@ static int __init atstk1003_init(void)
	at32_add_device_spi(1, spi1_board_info, ARRAY_SIZE(spi1_board_info));
#endif
#ifndef CONFIG_BOARD_ATSTK100X_SW2_CUSTOM
	at32_add_device_mci(0);
	at32_add_device_mci(0, NULL);
#endif
	at32_add_device_usba(0, NULL);
#ifndef CONFIG_BOARD_ATSTK100X_SW3_CUSTOM
+1 −1
Original line number Diff line number Diff line
@@ -137,7 +137,7 @@ static int __init atstk1004_init(void)
	at32_add_device_spi(1, spi1_board_info, ARRAY_SIZE(spi1_board_info));
#endif
#ifndef CONFIG_BOARD_ATSTK100X_SW2_CUSTOM
	at32_add_device_mci(0);
	at32_add_device_mci(0, NULL);
#endif
	at32_add_device_lcdc(0, &atstk1000_lcdc_data,
			     fbmem_start, fbmem_size, 0);
+5 −1
Original line number Diff line number Diff line
@@ -43,6 +43,9 @@ static irqreturn_t timer_interrupt(int irq, void *dev_id)
{
	struct clock_event_device *evdev = dev_id;

	if (unlikely(!(intc_get_pending(0) & 1)))
		return IRQ_NONE;

	/*
	 * Disable the interrupt until the clockevent subsystem
	 * reprograms it.
@@ -55,7 +58,8 @@ static irqreturn_t timer_interrupt(int irq, void *dev_id)

static struct irqaction timer_irqaction = {
	.handler	= timer_interrupt,
	.flags		= IRQF_TIMER | IRQF_DISABLED,
	/* Oprofile uses the same irq as the timer, so allow it to be shared */
	.flags		= IRQF_TIMER | IRQF_DISABLED | IRQF_SHARED,
	.name		= "avr32_comparator",
};

+38 −18
Original line number Diff line number Diff line
@@ -12,6 +12,7 @@
#include <linux/init.h>
#include <linux/platform_device.h>
#include <linux/dma-mapping.h>
#include <linux/gpio.h>
#include <linux/spi/spi.h>
#include <linux/usb/atmel_usba_udc.h>

@@ -1285,7 +1286,6 @@ at32_add_device_mci(unsigned int id, struct mci_platform_data *data)
{
	struct mci_platform_data	_data;
	struct platform_device		*pdev;
	struct dw_dma_slave		*dws;

	if (id != 0)
		return NULL;
@@ -1300,7 +1300,9 @@ at32_add_device_mci(unsigned int id, struct mci_platform_data *data)

	if (!data) {
		data = &_data;
		memset(data, 0, sizeof(struct mci_platform_data));
		memset(data, -1, sizeof(struct mci_platform_data));
		data->detect_pin = GPIO_PIN_NONE;
		data->wp_pin = GPIO_PIN_NONE;
	}

	if (platform_device_add_data(pdev, data,
@@ -1314,12 +1316,10 @@ at32_add_device_mci(unsigned int id, struct mci_platform_data *data)
	select_peripheral(PA(14), PERIPH_A, 0);	/* DATA2 */
	select_peripheral(PA(15), PERIPH_A, 0);	/* DATA3 */

	if (data) {
		if (data->detect_pin != GPIO_PIN_NONE)
	if (gpio_is_valid(data->detect_pin))
		at32_select_gpio(data->detect_pin, 0);
		if (data->wp_pin != GPIO_PIN_NONE)
	if (gpio_is_valid(data->wp_pin))
		at32_select_gpio(data->wp_pin, 0);
	}

	atmel_mci0_pclk.dev = &pdev->dev;

@@ -1853,11 +1853,11 @@ at32_add_device_cf(unsigned int id, unsigned int extint,
	if (at32_init_ide_or_cf(pdev, data->cs, extint))
		goto fail;

	if (data->detect_pin != GPIO_PIN_NONE)
	if (gpio_is_valid(data->detect_pin))
		at32_select_gpio(data->detect_pin, AT32_GPIOF_DEGLITCH);
	if (data->reset_pin != GPIO_PIN_NONE)
	if (gpio_is_valid(data->reset_pin))
		at32_select_gpio(data->reset_pin, 0);
	if (data->vcc_pin != GPIO_PIN_NONE)
	if (gpio_is_valid(data->vcc_pin))
		at32_select_gpio(data->vcc_pin, 0);
	/* READY is used as extint, so we can't select it as gpio */

@@ -1937,9 +1937,11 @@ static struct clk atmel_ac97c0_pclk = {
	.index		= 10,
};

struct platform_device *__init at32_add_device_ac97c(unsigned int id)
struct platform_device *__init
at32_add_device_ac97c(unsigned int id, struct ac97c_platform_data *data)
{
	struct platform_device *pdev;
	struct ac97c_platform_data _data;

	if (id != 0)
		return NULL;
@@ -1950,19 +1952,37 @@ struct platform_device *__init at32_add_device_ac97c(unsigned int id)

	if (platform_device_add_resources(pdev, atmel_ac97c0_resource,
				ARRAY_SIZE(atmel_ac97c0_resource)))
		goto err_add_resources;
		goto fail;

	if (!data) {
		data = &_data;
		memset(data, 0, sizeof(struct ac97c_platform_data));
		data->reset_pin = GPIO_PIN_NONE;
	}

	select_peripheral(PB(20), PERIPH_B, 0);	/* SYNC	*/
	select_peripheral(PB(21), PERIPH_B, 0);	/* SDO	*/
	select_peripheral(PB(22), PERIPH_B, 0);	/* SDI	*/
	select_peripheral(PB(23), PERIPH_B, 0);	/* SCLK	*/
	data->dma_rx_periph_id = 3;
	data->dma_tx_periph_id = 4;
	data->dma_controller_id = 0;

	if (platform_device_add_data(pdev, data,
				sizeof(struct ac97c_platform_data)))
		goto fail;

	select_peripheral(PB(20), PERIPH_B, 0);	/* SDO	*/
	select_peripheral(PB(21), PERIPH_B, 0);	/* SYNC	*/
	select_peripheral(PB(22), PERIPH_B, 0);	/* SCLK	*/
	select_peripheral(PB(23), PERIPH_B, 0);	/* SDI	*/

	/* TODO: gpio_is_valid(data->reset_pin) with kernel 2.6.26. */
	if (data->reset_pin != GPIO_PIN_NONE)
		at32_select_gpio(data->reset_pin, 0);

	atmel_ac97c0_pclk.dev = &pdev->dev;

	platform_device_add(pdev);
	return pdev;

err_add_resources:
fail:
	platform_device_put(pdev);
	return NULL;
}
Loading