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