|  | @@ -1120,3 +1120,107 @@ at32_add_device_eth(unsigned int id, struct macb_platform_data *data)
 | 
	
		
			
				|  |  |  			pin_mask |= (1 << 18);	/* SPD  */
 | 
	
		
			
				|  |  |  #endif
 | 
	
		
			
				|  |  |  		}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		select_peripheral(PIOC, pin_mask, PERIPH_A, 0);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		break;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	case 1:
 | 
	
		
			
				|  |  | +		pdev = &macb1_device;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		pin_mask  = (1 << 13);	/* TXD0 */
 | 
	
		
			
				|  |  | +		pin_mask |= (1 << 14);	/* TXD1 */
 | 
	
		
			
				|  |  | +		pin_mask |= (1 << 11);	/* TXEN */
 | 
	
		
			
				|  |  | +		pin_mask |= (1 << 12);	/* TXCK */
 | 
	
		
			
				|  |  | +		pin_mask |= (1 << 10);	/* RXD0 */
 | 
	
		
			
				|  |  | +		pin_mask |= (1 << 6);	/* RXD1 */
 | 
	
		
			
				|  |  | +		pin_mask |= (1 << 5);	/* RXER */
 | 
	
		
			
				|  |  | +		pin_mask |= (1 << 4);	/* RXDV */
 | 
	
		
			
				|  |  | +		pin_mask |= (1 << 3);	/* MDC  */
 | 
	
		
			
				|  |  | +		pin_mask |= (1 << 2);	/* MDIO */
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +#ifndef CONFIG_BOARD_MIMC200
 | 
	
		
			
				|  |  | +		if (!data->is_rmii)
 | 
	
		
			
				|  |  | +			pin_mask |= (1 << 15);	/* SPD  */
 | 
	
		
			
				|  |  | +#endif
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		select_peripheral(PIOD, pin_mask, PERIPH_B, 0);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +		if (!data->is_rmii) {
 | 
	
		
			
				|  |  | +			pin_mask  = (1 << 19);	/* COL  */
 | 
	
		
			
				|  |  | +			pin_mask |= (1 << 23);	/* CRS  */
 | 
	
		
			
				|  |  | +			pin_mask |= (1 << 26);	/* TXER */
 | 
	
		
			
				|  |  | +			pin_mask |= (1 << 27);	/* TXD2 */
 | 
	
		
			
				|  |  | +			pin_mask |= (1 << 28);	/* TXD3 */
 | 
	
		
			
				|  |  | +			pin_mask |= (1 << 29);	/* RXD2 */
 | 
	
		
			
				|  |  | +			pin_mask |= (1 << 30);	/* RXD3 */
 | 
	
		
			
				|  |  | +			pin_mask |= (1 << 24);	/* RXCK */
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +			select_peripheral(PIOC, pin_mask, PERIPH_B, 0);
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		break;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	default:
 | 
	
		
			
				|  |  | +		return NULL;
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	memcpy(pdev->dev.platform_data, data, sizeof(struct macb_platform_data));
 | 
	
		
			
				|  |  | +	platform_device_register(pdev);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	return pdev;
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +#endif
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +/* --------------------------------------------------------------------
 | 
	
		
			
				|  |  | + *  SPI
 | 
	
		
			
				|  |  | + * -------------------------------------------------------------------- */
 | 
	
		
			
				|  |  | +static struct resource atmel_spi0_resource[] = {
 | 
	
		
			
				|  |  | +	PBMEM(0xffe00000),
 | 
	
		
			
				|  |  | +	IRQ(3),
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +DEFINE_DEV(atmel_spi, 0);
 | 
	
		
			
				|  |  | +DEV_CLK(spi_clk, atmel_spi0, pba, 0);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +static struct resource atmel_spi1_resource[] = {
 | 
	
		
			
				|  |  | +	PBMEM(0xffe00400),
 | 
	
		
			
				|  |  | +	IRQ(4),
 | 
	
		
			
				|  |  | +};
 | 
	
		
			
				|  |  | +DEFINE_DEV(atmel_spi, 1);
 | 
	
		
			
				|  |  | +DEV_CLK(spi_clk, atmel_spi1, pba, 1);
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +void __init
 | 
	
		
			
				|  |  | +at32_spi_setup_slaves(unsigned int bus_num, struct spi_board_info *b, unsigned int n)
 | 
	
		
			
				|  |  | +{
 | 
	
		
			
				|  |  | +	/*
 | 
	
		
			
				|  |  | +	 * Manage the chipselects as GPIOs, normally using the same pins
 | 
	
		
			
				|  |  | +	 * the SPI controller expects; but boards can use other pins.
 | 
	
		
			
				|  |  | +	 */
 | 
	
		
			
				|  |  | +	static u8 __initdata spi_pins[][4] = {
 | 
	
		
			
				|  |  | +		{ GPIO_PIN_PA(3), GPIO_PIN_PA(4),
 | 
	
		
			
				|  |  | +		  GPIO_PIN_PA(5), GPIO_PIN_PA(20) },
 | 
	
		
			
				|  |  | +		{ GPIO_PIN_PB(2), GPIO_PIN_PB(3),
 | 
	
		
			
				|  |  | +		  GPIO_PIN_PB(4), GPIO_PIN_PA(27) },
 | 
	
		
			
				|  |  | +	};
 | 
	
		
			
				|  |  | +	unsigned int pin, mode;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	/* There are only 2 SPI controllers */
 | 
	
		
			
				|  |  | +	if (bus_num > 1)
 | 
	
		
			
				|  |  | +		return;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +	for (; n; n--, b++) {
 | 
	
		
			
				|  |  | +		b->bus_num = bus_num;
 | 
	
		
			
				|  |  | +		if (b->chip_select >= 4)
 | 
	
		
			
				|  |  | +			continue;
 | 
	
		
			
				|  |  | +		pin = (unsigned)b->controller_data;
 | 
	
		
			
				|  |  | +		if (!pin) {
 | 
	
		
			
				|  |  | +			pin = spi_pins[bus_num][b->chip_select];
 | 
	
		
			
				|  |  | +			b->controller_data = (void *)pin;
 | 
	
		
			
				|  |  | +		}
 | 
	
		
			
				|  |  | +		mode = AT32_GPIOF_OUTPUT;
 | 
	
		
			
				|  |  | +		if (!(b->mode & SPI_CS_HIGH))
 | 
	
		
			
				|  |  | +			mode |= AT32_GPIOF_HIGH;
 | 
	
		
			
				|  |  | +		at32_select_gpio(pin, mode);
 | 
	
		
			
				|  |  | +	}
 | 
	
		
			
				|  |  | +}
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +struct platform_device *__init
 |