I configure kernel 2.6.30 as below: make menuconfig [Device Drivers -> SPI support]
Code:
--- SPI support
*** SPI Master Controller Drivers ***
< > Atmel SPI Controller
-*- Utilities for Bitbanging SPI masters
<*> GPIO-based bitbanging SPI Master
*** SPI Protocol Masters ***
< > User mode SPI device driver support
< > Infineon TLE62X0 (for power switching)
then add something to /arch/arm/mach-at91/board-sam9260ek.c
Code:
.....
static struct spi_board_info ek_spi_gpio_devices[] = {
{ /* ATT7022 */
.modalias = "acsample",
.chip_select = 0,
.max_speed_hz = 15 * 1000 * 1000,
.mode = SPI_MODE_0,
.controller_data = (void*) AT91_PIN_PB27,
},
};
......
extern void __init at91_add_device_spi_gpio(struct spi_board_info *devices, int nr_devices);
static void __init ek_board_init(void)
{
.....
//at91_add_device_spi(ek_spi_devices, ARRAY_SIZE(ek_spi_devices));
at91_add_device_spi_gpio( ek_spi_gpio_devices, ARRAY_SIZE(ek_spi_gpio_devices) );
.....
}
add code to /arch/arm/mach-at91/at91sam9260_devices.c
Code:
.....
static struct spi_gpio_platform_data pacsdata = {
.sck = AT91_PIN_PB23,
.mosi = AT91_PIN_PB26,
.miso = AT91_PIN_PB22,
.num_chipselect = 1,
};
static struct platform_device at91sam9260_acsample_device = {
.name = "spi_gpio",
.id = 0,
.dev.platform_data = &pacsdata,
};
void __init at91_add_device_spi_gpio(struct spi_board_info *devices, int nr_devices)
{
unsigned long cs_pin;
int ret;
at91_sys_write( AT91_PMC_PCER, (1<<AT91SAM9260_ID_PIOB) );
at91_set_GPIO_periph(AT91_PIN_PB23, 1); /* SCK */
at91_set_multi_drive(AT91_PIN_PB23, 1);
at91_set_GPIO_periph(AT91_PIN_PB26, 1); /* MOSI */
at91_set_multi_drive(AT91_PIN_PB26, 1);
at91_set_GPIO_periph(AT91_PIN_PB22, 1); /* MISO */
at91_set_multi_drive(AT91_PIN_PB22, 1);
at91_set_GPIO_periph(AT91_PIN_PB27, 1); /* CS */
at91_set_multi_drive(AT91_PIN_PB27, 1);
ret = spi_register_board_info(devices, nr_devices);
ret = platform_device_register(&at91sam9260_acsample_device);
}
.........
then "make uImage", and boot it.
I can found file "spi_gpio.0" in "/sys/devices/platform/", but found nothing about spi device in "/dev".
I want to use the bitbanging spi master device to read/write ATT7022, Can anyone give me some advices or examples? I am a linux newer.
Code:
/ # cat /sys/devices/platform/spi_gpio.0/spi0.0/modalias
acsample