iio-trig-bfin-timer driver#

This driver allows any Blackfin system timer to be used as IIO trigger. It supports trigger rates from 0 to 100kHz in Hz resolution.

Tip

This driver depends on BLACKFIN

Adding Linux driver support#

Configure kernel with make menuconfig (alternatively use make xconfig or make qconfig)

Linux Kernel Configuration
    Device Drivers  --->
        [*] Staging drivers  --->
            <*>     Industrial I/O support  --->
                --- Industrial I/O support
                -*-   Enable ring buffer support within IIO
                -*-     Industrial I/O lock free software ring
                -*-   Enable triggered sampling support

                [--snip--]

                      *** Triggers - standalone ***
                < >   Periodic RTC triggers
                < >   GPIO trigger
                < >   SYSFS trigger
                <*>   Blackfin TIMER trigger

Example platform device initialization#

One or multiple instances of this driver can be declared by adding appropriate platform device data. An example is shown below:

static struct resource iio_bfin_trigger_resources[] = {
    {
        .start = IRQ_TIMER3,
        .end = IRQ_TIMER3,
        .flags = IORESOURCE_IRQ,
    },
};

static struct platform_device iio_bfin_trigger = {
    .name       = "iio_bfin_tmr_trigger",
    .id     = 0,
    .num_resources  = ARRAY_SIZE(iio_bfin_trigger_resources),
    .resource   = iio_bfin_trigger_resources,
};
static struct platform_device *board_devices[] __initdata = {
    &iio_bfin_trigger
};
static int __init board_init(void)
{
    [--snip--]

    platform_add_devices(board_devices, ARRAY_SIZE(board_devices));

    [--snip--]

    return 0;
}
arch_initcall(board_init);

Driver testing#

~$
cd /sys/bus/iio/devices
/sys/bus/iio/devices$
ls
device0                  device0:buffer0:event0   device1:buffer0:access0
device0:buffer0          device1                  device1:buffer0:event0
device0:buffer0:access0  device1:buffer0          trigger0
/sys/bus/iio/devices$
cd trigger0
/sys/bus/iio/devices/trigger0$
ls
name         subsystem    frequency  uevent
/sys/devices/trigger0$
cat name
bfintmr3
/sys/devices/trigger0$
echo 1000 > frequency
/sys/devices/trigger0$
echo 0 > frequency