Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Драйвер АЦП
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > Linux
TigerSHARC
Хочу прикрутить драйвер АЦП AD7606 к Linux на AT91SAM9260.
На сайте AD нашёл драйвер, интсрукцию по применению
=ad7606]http://wiki.analog.com/resources/tools-software/linux-drivers/iio-adc/ad7606?s[]=ad7606

вопросы:
1) нужно использовать файлы *.c и *.h (файлы драйвера по ссылке выше) как подключаемый модуль ядра (как по книге "Linux Device Driver")?
2) По ссылке выше сказано, что нужно добавить в конфигурацию ядра "Industrial I/O support", но у меня в меню конфигурации такой графы просто нет
У меня ядро 2.6.24. Старое для таких целей? или что-то нужно добавить предварительно?
3) встречаю пример применения драйвера:
CODE
static struct ad7606_platform_data ad7606_pdata = {
.default_os = 0,
.default_range = 10000,
.gpio_convst = GPIO_PF9,
.gpio_reset = GPIO_PF10,
.gpio_range = GPIO_PH0,
.gpio_os0 = GPIO_PH1,
.gpio_os1 = GPIO_PH2,
.gpio_os2 = GPIO_PH3,
.gpio_frstdata = -1,
.gpio_stby = GPIO_PF12,
};


правильно ли я понимаю что дефайны ног процессора (вроде GPIO_PF9) нужно искать в библиотеке компилятора (arm-none-eabi в моём случае) как для обычного ногодрыга.
xor.kruger
Нет.
Если вы хотите написать драйверы, то все "стандартные" дефайны следует искать в исходниках ядра.
В случае с МК AT91SAM9260 пины задефайнены в файле arch/arm/mach-at91/include/mach/gpio.h. Линк
Alesha
Судя по Linux Kernel Driver DataBase поддержка industrial i/o появилась в 2.6.32. Файлы драйвера АЦП судя по той же статье поставляются с ядром, который поддерживается analogом, так как есть опция в ядре которая позволяет собрать его как модуль, в этом случае с исходниками драйвера вам ничего делать не надо.
TigerSHARC
Спасибо ответившим. Буду копаться в ядрах постарше.
kurtis
Судя по http://kernelnewbies.org/Linux_2_6_39-DriversArch можно копаться в ядрах начиная с 2.6.39))
TigerSHARC
Добавить драйвер можно так(http://dmilvdv.narod.ru/AT91SAM9260/index.html?linux.html):

Код
Добавление видеодрайвера с поддержкой кадрового буфера

Скопировать файлы драйвера дисплея в /linux-2.6.xx/drivers/video/.

Добавить в файл /linux-2.6.xx/drivers/video/Makefile компиляцию драйвера после  строки # Hardware specific drivers go first:



obj-$(CONFIG_FB_MYDISPLAY) += mydisplay.o



Отредактировать файл /linux-2.6.xx/drivers/video/Kconfig, добавив свой драйвер, например, после config FB_ATMEL:



config FB_MYDISPLAY

tristate "my display Framebuffer support"

depends on FB && ARCH_AT91SAM9260

select FB_SYS_FILLRECT

select FB_SYS_COPYAREA

select FB_SYS_IMAGEBLIT

default y

help

   This is a framebuffer device for my display.



Вместо FB_SYS_XXX могут быть выбраны FB_CFB_XXX, в зависимости от функций, используемых кодом драйвера.



Патч для добавления драйвера mydisplay в Makefile и Kconfig.


Или можно добавить как подключаемый компонент ядра (как по книге Linux Device Driver)

Если делать как в первом случае, то послесоотвествующих манипуляций я смогу увидеть драйвер AD7606 через menuconfig?
xor.kruger
Да, после добавления (правки) файлов Kconfig и Makefile, Вы уведите свой драйвер во вкладке DeviceDrivers->Video->Имя_драйвер (судя по приведенному Вами примеру)
TigerSHARC
Цитата(xor.kruger @ Jan 18 2012, 22:53) *
Да, после добавления (правки) файлов Kconfig и Makefile, Вы уведите свой драйвер во вкладке DeviceDrivers->Video->Имя_драйвер (судя по приведенному Вами примеру)


Отлично, значит такой же подход справедлив и для АЦП.
TigerSHARC
Цитата(TigerSHARC @ Jan 17 2012, 12:08) *
Добавить драйвер можно так(http://dmilvdv.narod.ru/AT91SAM9260/index.html?linux.html):

Код
Добавление видеодрайвера с поддержкой кадрового буфера

Скопировать файлы драйвера дисплея в /linux-2.6.xx/drivers/video/.

Добавить в файл /linux-2.6.xx/drivers/video/Makefile компиляцию драйвера после  строки # Hardware specific drivers go first:



obj-$(CONFIG_FB_MYDISPLAY) += mydisplay.o



Отредактировать файл /linux-2.6.xx/drivers/video/Kconfig, добавив свой драйвер, например, после config FB_ATMEL:



config FB_MYDISPLAY

tristate "my display Framebuffer support"

depends on FB && ARCH_AT91SAM9260

select FB_SYS_FILLRECT

select FB_SYS_COPYAREA

select FB_SYS_IMAGEBLIT

default y

help

   This is a framebuffer device for my display.



Вместо FB_SYS_XXX могут быть выбраны FB_CFB_XXX, в зависимости от функций, используемых кодом драйвера.



Патч для добавления драйвера mydisplay в Makefile и Kconfig.


Или можно добавить как подключаемый компонент ядра (как по книге Linux Device Driver)

Если делать как в первом случае, то послесоотвествующих манипуляций я смогу увидеть драйвер AD7606 через menuconfig?

Оказалось что AD7606 уже включён в стандартную поставку ядра. Пришлось включить поддержку GPIO для его активации.

Но я заметил что в драйверах нигде не встречается конструкция, служащая для "инициализации" управляющих ног для АЦП, типа
Код
static struct ad7606_platform_data ad7606_pdata = {
    .default_os = 0,
    .default_range = 10000,
    .gpio_convst = GPIO_PF9,
    .gpio_reset = GPIO_PF10,
    .gpio_range = GPIO_PH0,
    .gpio_os0 = GPIO_PH1,
    .gpio_os1 = GPIO_PH2,
    .gpio_os2 = GPIO_PH3,
    .gpio_frstdata = -1,
    .gpio_stby = GPIO_PF12,
};

эта контсрукция описана на сайте: http://wiki.analog.com/resources/tools-sof...io-adc/ad7606?s[
НО! непоянтно куда её применить
где долнжа присутствовать эта конструкция и вообще где должна происходить инициализация АЦП, что нужно добавить кроме самого драйвера, который уже есть в ядре ?
или пристарте системы должен запускаться некий скрипт, который и производит инициализацию....
Вобщем тут путаюсь и несовсем понятно(((
xor.kruger
Попытаюсь вкратце ответить на Ваш вопрос.

В меню-конфигураторе (menuconfig) ядра GNU/Linux указывается используемый процессор, поддержка его интерфейсов, периферии и прочего.
К примеру Вы включи в ядре поддержку GPIO и кнопок которые висят на "этом самом" GPIO, только есть не задача, ядро "сходу" не знает на каких конкретно пинах находятся кнопки. Сообщить ему об этом можно в так называемом файле платформ (platform). Файл платформ - это файл, в котором описана периферия которая подключена к Вашему процессору.
Для процессора AT91SAM9260 это файл
Код
arch/arm/mach-at91/board-sam9260ek.c
.

Вот пример как описано подключение в нем кнопок к пинам AT91_PIN_PA30 и AT91_PIN_PA31:

Код
#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
static struct gpio_keys_button ek_buttons[] = {
         {
                 .gpio           = AT91_PIN_PA30,
                 .code           = BTN_3,
                 .desc           = "Button 3",
                 .active_low     = 1,
                 .wakeup         = 1,
         },
         {
                 .gpio           = AT91_PIN_PA31,
                 .code           = BTN_4,
                 .desc           = "Button 4",
                 .active_low     = 1,
                 .wakeup         = 1,
         }
};


Опции CONFIG_KEYBOARD_GPIO и CONFIG_KEYBOARD_GPIO_MODULE выставляются в меню конфигураторе.

Реально по умолчанию на один процессор может быть несколько платформов. Конкретный используется в зависимости от выбора отладочной платы (например для файла board-sam9260ek.c нужно выбрать SystemType->AtmelAT91SystemOnChip->AtmelAT91SAM9260-EK).

Точно также, по аналогии с кнопками необходимо поступить и с Вашим АЦП. По приведенной Вами ссылке на сайт аналоговцев уже все описано и Вам остается только скопировать и правильно указать желаемые ножки. Не забудьте, там же, в функции ek_board_init вставить добавление АЦП
Код
platform_add_devices(board_devices, ARRAY_SIZE(board_devices));



TigerSHARC
Цитата(xor.kruger @ Jan 23 2012, 12:35) *
Попытаюсь вкратце ответить на Ваш вопрос.

В меню-конфигураторе (menuconfig) ядра GNU/Linux указывается используемый процессор, поддержка его интерфейсов, периферии и прочего.
К примеру Вы включи в ядре поддержку GPIO и кнопок которые висят на "этом самом" GPIO, только есть не задача, ядро "сходу" не знает на каких конкретно пинах находятся кнопки. Сообщить ему об этом можно в так называемом файле платформ (platform). Файл платформ - это файл, в котором описана периферия которая подключена к Вашему процессору.
Для процессора AT91SAM9260 это файл
Код
arch/arm/mach-at91/board-sam9260ek.c
.

Вот пример как описано подключение в нем кнопок к пинам AT91_PIN_PA30 и AT91_PIN_PA31:

Код
#if defined(CONFIG_KEYBOARD_GPIO) || defined(CONFIG_KEYBOARD_GPIO_MODULE)
static struct gpio_keys_button ek_buttons[] = {
         {
                 .gpio           = AT91_PIN_PA30,
                 .code           = BTN_3,
                 .desc           = "Button 3",
                 .active_low     = 1,
                 .wakeup         = 1,
         },
         {
                 .gpio           = AT91_PIN_PA31,
                 .code           = BTN_4,
                 .desc           = "Button 4",
                 .active_low     = 1,
                 .wakeup         = 1,
         }
};


Опции CONFIG_KEYBOARD_GPIO и CONFIG_KEYBOARD_GPIO_MODULE выставляются в меню конфигураторе.

Реально по умолчанию на один процессор может быть несколько платформов. Конкретный используется в зависимости от выбора отладочной платы (например для файла board-sam9260ek.c нужно выбрать SystemType->AtmelAT91SystemOnChip->AtmelAT91SAM9260-EK).

Точно также, по аналогии с кнопками необходимо поступить и с Вашим АЦП. По приведенной Вами ссылке на сайт аналоговцев уже все описано и Вам остается только скопировать и правильно указать желаемые ножки. Не забудьте, там же, в функции ek_board_init вставить добавление АЦП
Код
platform_add_devices(board_devices, ARRAY_SIZE(board_devices));

Спасибо огромное!
В том то и дело что на сайте аналоговцев показано:
CODE
file: trunk/drivers/staging/iio/adc/ad7606.h

struct ad7606_platform_data {
unsigned default_os;
unsigned default_range;
unsigned gpio_convst;
unsigned gpio_reset;
unsigned gpio_range;
unsigned gpio_os0;
unsigned gpio_os1;
unsigned gpio_os2;
unsigned gpio_frstdata;
unsigned gpio_stby;
};
static struct ad7606_platform_data ad7606_pdata = {
.default_os = 0,
.default_range = 10000,
.gpio_convst = GPIO_PF9,
.gpio_reset = GPIO_PF10,
.gpio_range = GPIO_PH0,
.gpio_os0 = GPIO_PH1,
.gpio_os1 = GPIO_PH2,
.gpio_os2 = GPIO_PH3,
.gpio_frstdata = -1,
.gpio_stby = GPIO_PF12,
};

и можо подумать что пины задаются в ad7606.h

Цитата(xor.kruger @ Jan 23 2012, 12:35) *
Попытаюсь вкратце ответить на Ваш вопрос.

В меню-конфигураторе (menuconfig) ядра GNU/Linux указывается используемый процессор, поддержка его интерфейсов, периферии и прочего.


Это простите где?
Я делаю по этой инструкции и ничего такого делать не надо (но предлагается скачать конфигурационный файл)
http://dmilvdv.narod.ru/AT91SAM9260/index.html

Цитата(xor.kruger @ Jan 23 2012, 12:35) *
Реально по умолчанию на один процессор может быть несколько платформов. Конкретный используется в зависимости от выбора отладочной платы (например для файла board-sam9260ek.c нужно выбрать SystemType->AtmelAT91SystemOnChip->AtmelAT91SAM9260-EK).


"SystemType" - это вкладка в menuconfig? нету такой(

Непонятно стало как конфигурирвать вообще (порылся в конфиге в качестве процессора Intel указан, а на ARM нигде даже намёка нет) и вообще судя по:
http://belgorod.lug.ru/wiki/index.php/%D0%...0%BB%D1%8F_ARM9

Надо только частоту кварца руками в исходнике сменить...

Опыта тут нет. Подскажите, возможо где-то расписано как конфиг править ?

xor.kruger
Цитата
В том то и дело что на сайте аналоговцев показано:

Вам нужно добавить в платформ:
Код
#if defined(CONFIG_AD7606) || defined(CONFIG_AD7606_MODULE)
static struct resource ad7606_resources[] = {
    [0] = {
        .start    = 0x20100000,            /* SDP: AMS1 / CS_B */
        .end    = 0x20100000,
        .flags    = IORESOURCE_MEM,
    },
    [1] = {    /* general IRQ */
        .start    = IRQ_PH6,       /* SDP: GPIO6 */
        .end    = IRQ_PH6,
        .flags    = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHLEVEL,
    },
};

static struct platform_device ad7606_device = {
    .name        = "ad7606-8",
    .dev = {
        .platform_data = &ad7606_pdata,
    },
    .num_resources    = ARRAY_SIZE(ad7606_resources),
    .resource    = ad7606_resources,
};
#endif
static struct platform_device *board_devices[] __initdata = {
#if defined(CONFIG_AD7606) || \
    defined(CONFIG_AD7606_MODULE)
    &ad7606_device,
#endif
};


А в файле в котором описано
Код
static struct ad7606_platform_data ad7606_pdata = {
    .default_os = 0,
    .default_range = 10000,
    .gpio_convst = GPIO_PF9,
    .gpio_reset = GPIO_PF10,
    .gpio_range = GPIO_PH0,
    .gpio_os0 = GPIO_PH1,
    .gpio_os1 = GPIO_PH2,
    .gpio_os2 = GPIO_PH3,
    .gpio_frstdata = -1,
    .gpio_stby = GPIO_PF12,
};

необходимо переназначить пины. Только пины в для arm'ов от атмела именуются немного по другому, например AT91_PIN_PA5

Цитата
Я делаю по этой инструкции и ничего такого делать не надо (но предлагается скачать конфигурационный файл)

По умолчанию когда Вы делаете make menuconfig, то вызывается меню опций для архитектуры x86, именно поэтому Вы и видите только список интеловских процессоров.
Полный список поддерживаемых архитектур можно посмотреть в каталоге arch/
Для того что бы конфигурировать ядро для arm выполните:
Код
make ARCH=arm menuconfig

После этого Вы сможете увидеть тот список меню что я приводил выше.
Цитата
Опыта тут нет.

Базовые понятие по Embedded Linux для семейства AT91SAM9 можно подчерпнуть тут
Если есть неделька лишнего времени, то советую для понимая вручную самостоятельно пройти все этапы:
1. Toolchain
2. Bootstrap
3. Das U-Boot
4. Kernel
5. RootFS
TigerSHARC
На аналоге не указано в каком файле описано
Код
static struct ad7606_platform_data ad7606_pdata = {
    .default_os = 0,
    .default_range = 10000,
    .gpio_convst = GPIO_PF9,
    .gpio_reset = GPIO_PF10,
    .gpio_range = GPIO_PH0,
    .gpio_os0 = GPIO_PH1,
    .gpio_os1 = GPIO_PH2,
    .gpio_os2 = GPIO_PH3,
    .gpio_frstdata = -1,
    .gpio_stby = GPIO_PF12,
};


и можно понять что это файл ad7606.h , но это не так. Поэтому затрудняюсь с пониманием.
если я вас правильно понял, то после конфигурации дефайны для AD7606 пределяются автоматически, а вот структуры, описывающие параметры АЦП нужно писать самому...
спасибо большое за наставления.
Dron_Gus
Структура (платформ дата) должна быть описана в файле соответствующей борды. ./arch/arm/mach-at91/board-<ваша борда>.c
TigerSHARC
Непонятно, как задать требуемую частоту дискретизации(
частота дискретизации устанавливается частотой на ноге CONVST (.gpio_convst = pin_num). Но как программно задаётся эта частота - ума не приложу(

И ещё хотелось бы сделать что-то вроде этого
http://wiki.analog.com/software/linux/docs/iio/iio_netscope
, но на ARM9(АЦП подключен к нему). Что для этого нужно?
TigerSHARC
Не могу добится появления устройства в системе, как тут:

root:/> cd /sys/bus/iio/devices/
root:/sys/bus/iio/devices> ls
device0 device0:buffer0:access0 trigger0
device0:buffer0 device0:buffer0:event0

и тут:

root:/sys/devices/platform/ad7606-8.0/device0>


Хотя добавил устройства в makeconfig, добавил инициализацию АЦП, в массив ek_spi_devices[]:

CODE

static struct spi_board_info board_spi_board_info[] __initdata = {
#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 = 0, /* Framework bus number */
.chip_select = 3, /* Framework chip select */
.platform_data = &ad7606_pdata,
.irq = gpio_to_irq(AT91_PIN_PA22),
.mode = SPI_MODE_3,
},
#endif
};


сама структура АЦП тоже описана в файле борды

CODE
static struct ad7606_platform_data ad7606_pdata = {
.default_os = 0,
.default_range = 10000,
.gpio_convst = AT91_PIN_PA27,
.gpio_reset = AT91_PIN_PA28,
.gpio_range = AT91_PIN_PA29,
.gpio_frstdata = -1,
.gpio_stby = -1,
};


В качестве тактового генератора используется hrtimer. В файле борды есть :
CODE

static const char *hrtimer_trigger_pdata[] = {
"0", /* 0 is the name of the trigger */
NULL,
};

static struct platform_device hrtimer_trigger = {
.name = "iio_hrtimer_trigger",
.device = {
.platform_data = &hrtimer_trigger_pdata,
},
};


вот так выглядит функция инициализации перифирии:
CODE
static void __init ek_board_init(void)
{
/* Serial */
at91_add_device_serial();
/* USB Host */
at91_add_device_usbh(&ek_usbh_data);
/* USB Device */
at91_add_device_udc(&ek_udc_data);
/* SPI */
at91_add_device_spi(ek_spi_devices, ARRAY_SIZE(ek_spi_devices)); //в том числе и AD7606
/* NAND */
ek_add_device_nand();
/* Ethernet */
at91_add_device_eth(&ek_macb_data);
/* MMC */
at91_add_device_mmc(0, &ek_mmc_data);
/* I2C */
at91_add_device_i2c(ek_i2c_devices, ARRAY_SIZE(ek_i2c_devices));
/* LEDs */
at91_gpio_leds(ek_leds, ARRAY_SIZE(ek_leds));
/* Push Buttons */
ek_add_device_buttons();
}


Но в файловой системе всё равно ничего нового не появляется.
Что я делаю не так?
Как обычно добавляются драйверы в платформу?
sasamy
Цитата(TigerSHARC @ May 22 2012, 22:22) *
Хотя добавил устройства в makeconfig, добавил инициализацию АЦП, в массив ek_spi_devices[]:


Вы не добавили а просто скопипастили пример AD не учитывая особенности своей платы. Вот это нужно поместить внутри 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 = 0, /* Framework bus number */
        .chip_select = 3, /* Framework chip select */
        .platform_data = &ad7606_pdata,
        .irq = gpio_to_irq(AT91_PIN_PA22),
        .mode = SPI_MODE_3,
    },
#endif


а не в абстрактном board_spi_board_info[] из примера который у вас потом естественно не используетя т.к. для инициализации передается ek_spi_devices[]

Код
static void __init ek_board_init(void)
{
...
    /* SPI */
    at91_add_device_spi( >>> ek_spi_devices <<<< , ARRAY_SIZE(ek_spi_devices)); //в том числе и AD7606 < --- в каком месте ??
...
}


Далее - чтобы потом все же что-то заработало, номер SPI и CS нужно подставлять реальные - на которые вы подключили АЦП а не копировать из примера
Код
        .bus_num = 0, /* Framework bus number */
        .chip_select = 3, /* Framework chip select */


если только у вас действительно не подключено к spi0, cs3
TigerSHARC
Цитата(sasamy @ May 23 2012, 11:49) *
Вы не добавили а просто скопипастили пример AD не учитывая особенности своей платы. Вот это нужно поместить внутри 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 = 0, /* Framework bus number */
        .chip_select = 3, /* Framework chip select */
        .platform_data = &ad7606_pdata,
        .irq = gpio_to_irq(AT91_PIN_PA22),
        .mode = SPI_MODE_3,
    },
#endif


а не в абстрактном board_spi_board_info[] из примера который у вас потом естественно не используетя т.к. для инициализации передается ek_spi_devices[]

Далее - чтобы потом все же что-то заработало, номер SPI и CS нужно подставлять реальные - на которые вы подключили АЦП а не копировать из примера
Код
        .bus_num = 0, /* Framework bus number */
        .chip_select = 3, /* Framework chip select */


если только у вас действительно не подключено к spi0, cs3

Посмотрите пожалуйста внимательнее. В моём посте выше так и указано ek_spi_devices[], т.е. АЦП находится в массиве spi устройств, всё нормально.
чип селект и номер шины скопипастил сюда с сайта аналога, на самом деле у меня соответствует физическому соединению
CODE

.bus_num = 1, /* Framework bus number */
.chip_select = 0, /* Framework chip select */[/code]



вобщем всё как вы рекомендовали уже сделано, но новых устройств не появляется(ядро собирается без проблем).

Код
static void __init ek_board_init(void)
{
...
    /* SPI */
    at91_add_device_spi( >>> ek_spi_devices <<<< , ARRAY_SIZE(ek_spi_devices)); //в том числе и AD7606 < --- в каком месте ??
...
}


в смысле тут и есть добавление AD7606 в конфигурацию.

Ещё непонятно как довабить в систему hrtimer:
в menuconfig добавил, необходимые структуры прописал(писал выше об этом), но нигде не могу найти функцию для добавоения в систему( типа at91_add_device_XX). Подобные функции (которые объявлены в board.h) есть только для I2C, SPI, TC, SCC.
требуется помощь...

P.S. прошу прощения что немного ввёл в заблуждение, так как копировал код напрямую с сайта аналога и правил тут. Потому как кода своего не было под рукой на тот момент.
sasamy
Цитата(TigerSHARC @ May 23 2012, 12:33) *
Посмотрите пожалуйста внимательнее. В моём посте выше так и указано ek_spi_devices[]


Интересный поворот sm.gif еще раз привожу ваш пример выше полностью чтобы вы внимательно посмотрели

Цитата
static struct spi_board_info board_spi_board_info[] __initdata = {
#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 = 0, /* Framework bus number */
.chip_select = 3, /* Framework chip select */
.platform_data = &ad7606_pdata,
.irq = gpio_to_irq(AT91_PIN_PA22),
.mode = SPI_MODE_3,
},
#endif
};
TigerSHARC
выше написано.
P.S. прошу прощения что немного ввёл в заблуждение, так как копировал код напрямую с сайта аналога и правил тут. Потому как кода своего не было под рукой на тот момент.

ну не было кода под рукой когда писал пост вот и указал то что скопировал с сайта. Естественно я добавил AD7606 в уже существующую структуру(иначе бы ядро не собралось).

Проще говоря, все ваши замечания уже учтены. Но устройство не появляется
sasamy
Цитата
Ещё непонятно как довабить в систему hrtimer


http://electronix.ru/forum/index.php?showt...t&p=1039729

для at91sam9g45 настоящий hrtimer есть только в -rt ветке (таймеры TC включенные каскадом), соответственно нужно наложить патч. http://www.at91.com/linux4sam/bin/view/Lin.../RealTime#Setup

Цитата
Но устройство не появляется


Если структура spi-device прописана верно, как минимум будет вызвана ф-ция probe драйвера AD - просмотрите лог загрузки - там должны быть сообщения об ошибках, дополнительно включите отладочные сообщения.
TigerSHARC
Цитата(sasamy @ May 23 2012, 13:13) *
http://electronix.ru/forum/index.php?showt...t&p=1039729

для at91sam9g45 настоящий hrtimer есть только в -rt ветке, соответственно нужно наложить патч. http://www.at91.com/linux4sam/bin/view/Lin.../RealTime#Setup



Если структура spi-device прописана верно, как минимум будет вызвана ф-ция probe драйвера AD - просмотрите лог загрузки - там должны быть сообщения об ошибках, дополнительно включите отладочные сообщения.


мне интересно какую функцию вщять для инициализации тригера (типа at91_add_device...). непонятно. на сайте аналога сказано что нужно инициализировать таким образом как любое другое устройство. Но подълдящую функцию найти не могу.
логи посмотрю сегодня вечером.
xor.kruger
На linux4sam.org (сайт посвященный Embedded Linux для Atmel"овских процессоров) появилась статейка о том как прикрутить ADC драйвер для семейств at91sam9xxxx : http://www.at91.com/linux4sam/bin/view/Lin...AM/IioAdcDriver
TigerSHARC
Цитата(xor.kruger @ Jun 20 2012, 13:54) *
На linux4sam.org (сайт посвященный Embedded Linux для Atmel"овских процессоров) появилась статейка о том как прикрутить ADC драйвер для семейств at91sam9xxxx : http://www.at91.com/linux4sam/bin/view/Lin...AM/IioAdcDriver

Да, я видел эту статью, но вот только самое важного нет и написано:
Please note that the setup of the timer counters in themselves is not achieved by this driver, so you will have to do it yourself. However, some dummy example of how to setup the timer-counter-0 is attached to this page.

В этом-то и проблема - написать драйвер хардварного триггера для IIO. Софтовые триггеры совсем не подходят(зачем может понадобится тактировать АЦП клоком с таким огромным джиттером?).
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.