|
SPI драйвер, забирать данные по прерыванию |
|
|
|
Jun 4 2012, 07:35
|
Местный
  
Группа: Участник
Сообщений: 408
Регистрация: 28-05-12
Пользователь №: 72 052

|
Цитата(Dron_Gus @ Jun 4 2012, 10:06)  Вероятно он "внутри" SPI, т.к. является устройством на шине. (например на моей железке это выглядит так /sys/devices/platform/s3c64xx-spi.0/spi_master/spi0/spi0.0/) Дело в том, что я объявляю в массиве устройств SPI устройство с именем SPI_device (.modalias = "SPI_device"), затем указываю массив всех SPI устройств в at91_add_device_spi(), откуда вызывается spi_register_board_info(), где аргумент моё устройство, и функция platform_device_register() где аргумент устройство atmel_spi. В итоге устройство с именем "SPI_device" не появляется. не могли бы вы привести код как у вас регистрируется устройство "s3c64xx-spi.0" ?
|
|
|
|
|
Jun 4 2012, 09:19
|

Профессионал
    
Группа: Свой
Сообщений: 1 202
Регистрация: 9-01-05
Из: Санкт-Петербург
Пользователь №: 1 861

|
Код static struct spi_board_info crux_spi_devices[] = { { /* CAN */ .modalias = "mcp2515", .bus_num = 0, .chip_select = 0, .max_speed_hz = 10 * 1000 * 1000, .irq = CAN_IRQ, .platform_data = &mcp251x_info, .controller_data= &crux_mcp_cs, }, }; Код struct platform_device s3c2416_device_spi = { .name = "s3c64xx-spi", .id = 0, .num_resources = ARRAY_SIZE(s3c2416_spi_resource), .resource = s3c2416_spi_resource, .dev = { .dma_mask = &spi_dmamask, .coherent_dma_mask = DMA_BIT_MASK(32), .platform_data = &s3c2416_spi0_pdata, }, }; Код static struct platform_device *crux_devices[] __initdata = { ... &s3c2416_device_spi, ... }; Код static void __init crux_machine_init(void) { ... spi_register_board_info(crux_spi_devices, ARRAY_SIZE(crux_spi_devices)); ... platform_add_devices(crux_devices, ARRAY_SIZE(crux_devices)); ... } А драйвер для Вашего "SPI_device" написан? Зарегистрирован (spi_register_driver)?
--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
|
|
|
|
|
Jun 4 2012, 09:49
|

Профессионал
    
Группа: Свой
Сообщений: 1 202
Регистрация: 9-01-05
Из: Санкт-Петербург
Пользователь №: 1 861

|
Код static struct resource s3c2416_spi_resource[] = { [0] = { .start = S3C2416_PA_SPI, .end = S3C2416_PA_SPI + 0x100 - 1, .flags = IORESOURCE_MEM, }, [1] = { .start = DMACH_SPI0_TX, .end = DMACH_SPI0_TX, .flags = IORESOURCE_DMA, }, [2] = { .start = DMACH_SPI0_RX, .end = DMACH_SPI0_RX, .flags = IORESOURCE_DMA, }, [3] = { .start = IRQ_SPI0, .end = IRQ_SPI0, .flags = IORESOURCE_IRQ, }, };
struct s3c64xx_spi_info s3c2416_spi0_pdata = { .src_clk_nr = 0, /* PCLK */ .fifo_lvl_mask = 0x7f, .rx_lvl_offset = 13, .tx_st_done = 21, .high_speed = 1, .cfg_gpio = s3c2416_spi0_cfg_gpio, };
--------------------
Если сверху смотреть, то сбоку кажется, что снизу ничего не видно.
|
|
|
|
|
Jun 4 2012, 09:52
|
Местный
  
Группа: Участник
Сообщений: 408
Регистрация: 28-05-12
Пользователь №: 72 052

|
Я вот что использую для своего устройства: Код static struct resource spi1_resources[] = { 559 [0] = { 560 .start = AT91SAM9260_BASE_SPI1, 561 .end = AT91SAM9260_BASE_SPI1 + SZ_16K - 1, 562 .flags = IORESOURCE_MEM, 563 }, 564 [1] = { 565 .start = AT91SAM9260_ID_SPI1, 566 .end = AT91SAM9260_ID_SPI1, 567 .flags = IORESOURCE_IRQ, 568 }, 569 };
|
|
|
|
|
Jun 4 2012, 11:02
|
Местный
  
Группа: Участник
Сообщений: 408
Регистрация: 28-05-12
Пользователь №: 72 052

|
Код static struct spi_board_info ek_spi_devices[] = {
#if defined(CONFIG_AD7606) || \ defined(CONFIG_AD7606_MODULE) { /* the modalias must be the same as spi device driver name */ .modalias = "ad7606-8", /* Name of spi_driver for this device */ .max_speed_hz = 10000000, /* max spi clock (SCK) speed in HZ */ .bus_num = 1, /* Framework bus number */ .chip_select = 0, /* Framework chip select */ .platform_data = &ad7606_pdata, //.controller_data = (void *) AT91_PIN_PB3, /* Blackfin only */ .irq = AT91SAM9260_ID_IRQ2, .mode = SPI_MODE_3, }, #endif }; а вот вывод Код root:/sys/devices/platform# ls alarmtimer at91_rtt.0 atmel_tcb.1 atmel_usart.2 power at91_mci atmel_spi.1 atmel_usart.0 iio-trigger-hrtimer.0 uevent at91_ohci atmel_tcb.0 atmel_usart.1 macb Хотя ожидалось увидеть здесь AD7606-8.0 вот ещё интересный вывод Код root@starterkit:/sys/devices/platform/atmel_spi.1/spi1.0# ls driver iio:device0 modalias power subsystem uevent iio:device0 - это по всей видимости моё устройство, но почему не ad7606-8 ?
Сообщение отредактировал Dubov - Jun 4 2012, 11:04
|
|
|
|
|
Jun 4 2012, 15:58
|
Местный
  
Группа: Участник
Сообщений: 408
Регистрация: 28-05-12
Пользователь №: 72 052

|
Цитата(Dron_Gus @ Jun 4 2012, 15:50)  Сделайте в /sys/devices/platform/atmel_spi.1/spi1.0 "cat modalias" сделал... да! Получил AD7606-8 значит ли это что драйвер установился нормально?
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|