@ -518,46 +518,45 @@ static void iio_trig_subirqunmask(struct irq_data *d)
static struct iio_trigger * viio_trigger_alloc ( const char * fmt , va_list vargs )
{
struct iio_trigger * trig ;
int i ;
trig = kzalloc ( sizeof * trig , GFP_KERNEL ) ;
if ( trig ) {
int i ;
trig - > dev . type = & iio_trig_type ;
trig - > dev . bus = & iio_bus_type ;
device_initialize ( & trig - > dev ) ;
mutex_init ( & trig - > pool_lock ) ;
trig - > subirq_base
= irq_alloc_descs ( - 1 , 0 ,
CONFIG_IIO_CONSUMERS_PER_TRIGGER ,
0 ) ;
if ( trig - > subirq_base < 0 ) {
kfree ( trig ) ;
return NULL ;
}
if ( ! trig )
return NULL ;
trig - > name = kvasprintf ( GFP_KERNEL , fmt , vargs ) ;
if ( trig - > name = = NULL ) {
irq_free_descs ( trig - > subirq_base ,
CONFIG_IIO_CONSUMERS_PER_TRIGGER ) ;
kfree ( trig ) ;
return NULL ;
}
trig - > subirq_chip . name = trig - > name ;
trig - > subirq_chip . irq_mask = & iio_trig_subirqmask ;
trig - > subirq_chip . irq_unmask = & iio_trig_subirqunmask ;
for ( i = 0 ; i < CONFIG_IIO_CONSUMERS_PER_TRIGGER ; i + + ) {
irq_set_chip ( trig - > subirq_base + i ,
& trig - > subirq_chip ) ;
irq_set_handler ( trig - > subirq_base + i ,
& handle_simple_irq ) ;
irq_modify_status ( trig - > subirq_base + i ,
IRQ_NOREQUEST | IRQ_NOAUTOEN ,
IRQ_NOPROBE ) ;
}
get_device ( & trig - > dev ) ;
trig - > dev . type = & iio_trig_type ;
trig - > dev . bus = & iio_bus_type ;
device_initialize ( & trig - > dev ) ;
mutex_init ( & trig - > pool_lock ) ;
trig - > subirq_base = irq_alloc_descs ( - 1 , 0 ,
CONFIG_IIO_CONSUMERS_PER_TRIGGER ,
0 ) ;
if ( trig - > subirq_base < 0 )
goto free_trig ;
trig - > name = kvasprintf ( GFP_KERNEL , fmt , vargs ) ;
if ( trig - > name = = NULL )
goto free_descs ;
trig - > subirq_chip . name = trig - > name ;
trig - > subirq_chip . irq_mask = & iio_trig_subirqmask ;
trig - > subirq_chip . irq_unmask = & iio_trig_subirqunmask ;
for ( i = 0 ; i < CONFIG_IIO_CONSUMERS_PER_TRIGGER ; i + + ) {
irq_set_chip ( trig - > subirq_base + i , & trig - > subirq_chip ) ;
irq_set_handler ( trig - > subirq_base + i , & handle_simple_irq ) ;
irq_modify_status ( trig - > subirq_base + i ,
IRQ_NOREQUEST | IRQ_NOAUTOEN , IRQ_NOPROBE ) ;
}
get_device ( & trig - > dev ) ;
return trig ;
free_descs :
irq_free_descs ( trig - > subirq_base , CONFIG_IIO_CONSUMERS_PER_TRIGGER ) ;
free_trig :
kfree ( trig ) ;
return NULL ;
}
struct iio_trigger * iio_trigger_alloc ( const char * fmt , . . . )