Jump to content

    
Dubov

SPI драйвер

Recommended Posts

Вероятно он "внутри" SPI, т.к. является устройством на шине. (например на моей железке это выглядит так /sys/devices/platform/s3c64xx-spi.0/spi_master/spi0/spi0.0/)

Share this post


Link to post
Share on other sites
Вероятно он "внутри" 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" ?

Share this post


Link to post
Share on other sites

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)?

Share this post


Link to post
Share on other sites
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,
};

Share this post


Link to post
Share on other sites

Я вот что использую для своего устройства:

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 };

Share this post


Link to post
Share on other sites

Это платформ дата для контроллера SPI, но как я понимаю с самим контроллером SPI у Вас проблем нет, он пробится и появляется?

Share this post


Link to post
Share on other sites

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 ?

Edited by Dubov

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.