Ejemplo n.º 1
0
int adis16240_probe_trigger(struct iio_dev *indio_dev)
{
	int ret;
	struct adis16240_state *st = indio_dev->dev_data;

	st->trig = iio_allocate_trigger();
	st->trig->name = kasprintf(GFP_KERNEL,
				   "adis16240-dev%d",
				   indio_dev->id);
	if (!st->trig->name) {
		ret = -ENOMEM;
		goto error_free_trig;
	}
	st->trig->dev.parent = &st->us->dev;
	st->trig->owner = THIS_MODULE;
	st->trig->private_data = st;
	st->trig->set_trigger_state = &adis16240_data_rdy_trigger_set_state;
	st->trig->try_reenable = &adis16240_trig_try_reen;
	st->trig->control_attrs = &adis16240_trigger_attr_group;
	ret = iio_trigger_register(st->trig);

	/* select default trigger */
	indio_dev->trig = st->trig;
	if (ret)
		goto error_free_trig_name;

	return 0;

error_free_trig_name:
	kfree(st->trig->name);
error_free_trig:
	iio_free_trigger(st->trig);

	return ret;
}
void inv_mpu_remove_trigger(struct iio_dev *indio_dev)
{
	struct inv_mpu_iio_s *st = iio_priv(indio_dev);

	iio_trigger_unregister(st->trig);
	iio_free_trigger(st->trig);
}
int inv_mpu_probe_trigger(struct iio_dev *indio_dev)
{
	int ret;
	struct inv_mpu_state *st = iio_priv(indio_dev);

#ifdef INV_KERNEL_3_10
	st->trig = iio_trigger_alloc("%s-dev%d",
#else
	st->trig = iio_allocate_trigger("%s-dev%d",
#endif
					indio_dev->name,
					indio_dev->id);
	if (st->trig == NULL)
		return -ENOMEM;
	st->trig->dev.parent = &st->client->dev;
#ifndef INV_KERNEL_3_10
	st->trig->private_data = indio_dev;
#endif
	st->trig->ops = &inv_mpu_trigger_ops;
	ret = iio_trigger_register(st->trig);

	if (ret) {
#ifdef INV_KERNEL_3_10
		iio_trigger_free(st->trig);
#else
		iio_free_trigger(st->trig);
#endif
		return -EPERM;
	}
	indio_dev->trig = st->trig;

	return 0;
}
Ejemplo n.º 4
0
static int yas_probe_trigger(struct iio_dev *indio_dev)
{
	int ret;
	struct yas_state *st = iio_priv(indio_dev);
	indio_dev->pollfunc = iio_alloc_pollfunc(&iio_pollfunc_store_time,
			&yas_trigger_handler, IRQF_ONESHOT, indio_dev,
			"%s_consumer%d", indio_dev->name, indio_dev->id);
	if (indio_dev->pollfunc == NULL) {
		ret = -ENOMEM;
		goto error_ret;
	}
	st->trig = iio_allocate_trigger("%s-dev%d",
			indio_dev->name,
			indio_dev->id);
	if (!st->trig) {
		ret = -ENOMEM;
		goto error_dealloc_pollfunc;
	}
	st->trig->dev.parent = &st->client->dev;
	st->trig->ops = &yas_trigger_ops;
	st->trig->private_data = indio_dev;
	ret = iio_trigger_register(st->trig);
	if (ret)
		goto error_free_trig;
	return 0;

error_free_trig:
	iio_free_trigger(st->trig);
error_dealloc_pollfunc:
	iio_dealloc_pollfunc(indio_dev->pollfunc);
error_ret:
	return ret;
}
void inv_ak89xx_remove_trigger(struct iio_dev *indio_dev)
{
	struct inv_ak89xx_state_s *st = iio_priv(indio_dev);

	iio_trigger_unregister(st->trig);
	iio_free_trigger(st->trig);
}
Ejemplo n.º 6
0
static void yas_remove_trigger(struct iio_dev *indio_dev)
{
	struct yas_state *st = iio_priv(indio_dev);
	iio_trigger_unregister(st->trig);
	iio_free_trigger(st->trig);
	iio_dealloc_pollfunc(indio_dev->pollfunc);
}
int inv_ak89xx_probe_trigger(struct iio_dev *indio_dev)
{
	int ret;
	struct inv_ak89xx_state_s *st = iio_priv(indio_dev);

	st->trig = iio_allocate_trigger("%s-dev%d",
					indio_dev->name,
					indio_dev->id);
	if (st->trig == NULL) {
		ret = -ENOMEM;
		goto error_ret;
	}
	/* select default trigger */
	st->trig->dev.parent = &st->i2c->dev;
	st->trig->private_data = indio_dev;
	st->trig->ops = &inv_ak89xx_trigger_ops;
	ret = iio_trigger_register(st->trig);

	/* select default trigger */
	indio_dev->trig = st->trig;
	if (ret)
		goto error_free_trig;

	return 0;

error_free_trig:
	iio_free_trigger(st->trig);
error_ret:
	return ret;
}
Ejemplo n.º 8
0
static int optical_allocate_trigger(struct iio_dev *indio_dev,
				const struct iio_trigger_ops *trigger_ops)
{
	int err = 0;
	struct optical_data *sdata = iio_priv(indio_dev);
	printk (KERN_ALERT "[%s]\n", __FUNCTION__); 
#ifdef OPTICAL_SENSOR_DEBUG
	gsdata = sdata;
#endif
	//sdata->trig = iio_trigger_alloc("%s-trigger", indio_dev->name);
	sdata->trig = iio_allocate_trigger("%s-trigger", indio_dev->name);
	if (NULL != sdata->trig)
	{
	    err = request_threaded_irq(sdata->get_irq_data_ready(indio_dev), //allocate an interrupt line VungGV
#ifdef OPTICAL_SENSOR_DEBUG
				NULL,
				optical_trigger_handler_debug,
#else
			    iio_trigger_generic_data_rdy_poll,
			    NULL,
#endif	    
			    IRQF_TRIGGER_FALLING, //trong interrupt.h
			    sdata->trig->name,
			    sdata->trig);

	    if (!err)
	    {
	       // iio_trigger_set_drvdata(sdata->trig, indio_dev); //vungGV
		dev_set_drvdata(&(sdata->trig)->dev, indio_dev);
	        sdata->trig->ops = trigger_ops;
	        sdata->trig->dev.parent = sdata->dev;

	        err = iio_trigger_register(sdata->trig);
	        if (0 <= err)
	        {
	            indio_dev->trig = sdata->trig;
	            return 0;
	        }
	        else
	        {
	            dev_err(&indio_dev->dev, "failed to register iio trigger.\n");
            }
	        free_irq(sdata->get_irq_data_ready(indio_dev), sdata->trig);
	    }
	    else
	    {
    		dev_err(&indio_dev->dev, "failed to register iio thread.\n");
        }
       // iio_trigger_free(sdata->trig);
	    iio_free_trigger(sdata->trig);
   	}
	else
	{
		err = -ENOMEM;
		dev_err(&indio_dev->dev, "failed to allocate iio trigger.\n");
	}

	return err;
}
Ejemplo n.º 9
0
void adis16260_remove_trigger(struct iio_dev *indio_dev)
{
	struct adis16260_state *state = indio_dev->dev_data;

	iio_trigger_unregister(state->trig);
	free_irq(state->us->irq, state->trig);
	iio_free_trigger(state->trig);
}
Ejemplo n.º 10
0
void adis16203_remove_trigger(struct iio_dev *indio_dev)
{
	struct adis16203_state *st = iio_priv(indio_dev);

	iio_trigger_unregister(st->trig);
	free_irq(st->us->irq, st->trig);
	iio_free_trigger(st->trig);
}
Ejemplo n.º 11
0
static void optical_deallocate_trigger(struct iio_dev *indio_dev)
{
	struct optical_data *sdata = iio_priv(indio_dev);
	iio_trigger_unregister(sdata->trig);
	free_irq(sdata->get_irq_data_ready(indio_dev), sdata->trig);
//	iio_trigger_free(sdata->trig);
	iio_free_trigger(sdata->trig);
}
Ejemplo n.º 12
0
void adis16240_remove_trigger(struct iio_dev *indio_dev)
{
	struct adis16240_state *state = indio_dev->dev_data;

	iio_trigger_unregister(state->trig);
	kfree(state->trig->name);
	iio_free_trigger(state->trig);
}
Ejemplo n.º 13
0
void lis3l02dq_remove_trigger(struct iio_dev *indio_dev)
{
	struct lis3l02dq_state *state = indio_dev->dev_data;

	iio_trigger_unregister(state->trig);
	kfree(state->trig->name);
	iio_free_trigger(state->trig);
}
void inv_mpu_remove_trigger(struct iio_dev *indio_dev)
{
	struct inv_mpu_state *st = iio_priv(indio_dev);

	iio_trigger_unregister(st->trig);
#ifdef INV_KERNEL_3_10
	iio_trigger_free(st->trig);
#else
	iio_free_trigger(st->trig);
#endif
}
Ejemplo n.º 15
0
int adis16260_probe_trigger(struct iio_dev *indio_dev)
{
	int ret;
	struct adis16260_state *st = indio_dev->dev_data;

	st->trig = iio_allocate_trigger("%s-dev%d",
					spi_get_device_id(st->us)->name,
					indio_dev->id);
	if (st->trig == NULL) {
		ret = -ENOMEM;
		goto error_ret;
	}

	ret = request_irq(st->us->irq,
			  &iio_trigger_generic_data_rdy_poll,
			  IRQF_TRIGGER_RISING,
			  "adis16260",
			  st->trig);
	if (ret)
		goto error_free_trig;

	st->trig->dev.parent = &st->us->dev;
	st->trig->owner = THIS_MODULE;
	st->trig->private_data = st;
	st->trig->set_trigger_state = &adis16260_data_rdy_trigger_set_state;
	ret = iio_trigger_register(st->trig);

	/* select default trigger */
	indio_dev->trig = st->trig;
	if (ret)
		goto error_free_irq;

	return 0;

error_free_irq:
	free_irq(st->us->irq, st->trig);
error_free_trig:
	iio_free_trigger(st->trig);
error_ret:
	return ret;
}
int adis16400_probe_trigger(struct iio_dev *indio_dev)
{
	int ret;
	struct adis16400_state *st = iio_priv(indio_dev);

	st->trig = iio_allocate_trigger("%s-dev%d",
					indio_dev->name,
					indio_dev->id);
	if (st->trig == NULL) {
		ret = -ENOMEM;
		goto error_ret;
	}

	ret = request_irq(st->us->irq,
			  &iio_trigger_generic_data_rdy_poll,
			  IRQF_TRIGGER_RISING,
			  "adis16400",
			  st->trig);
	if (ret)
		goto error_free_trig;
	st->trig->dev.parent = &st->us->dev;
	st->trig->private_data = indio_dev;
	st->trig->ops = &adis16400_trigger_ops;
	ret = iio_trigger_register(st->trig);

	/*                        */
	indio_dev->trig = st->trig;
	if (ret)
		goto error_free_irq;

	return 0;

error_free_irq:
	free_irq(st->us->irq, st->trig);
error_free_trig:
	iio_free_trigger(st->trig);
error_ret:
	return ret;
}
int ssp_iio_probe_trigger(struct ssp_data *data, struct iio_dev *indio_dev, struct iio_trigger *trig)
{
	int ret;

	trig = iio_allocate_trigger("%s-dev%d",
					indio_dev->name,
					indio_dev->id);
	if (trig == NULL)
		return -ENOMEM;
	trig->dev.parent = &data->client->dev;
	trig->private_data = indio_dev;
	trig->ops = &ssp_iio_trigger_ops;
	ret = iio_trigger_register(trig);

	if (ret) {
		iio_free_trigger(trig);
		return -EPERM;
	}
	indio_dev->trig = trig;

	return 0;
}
int inv_mpu_probe_trigger(struct iio_dev *indio_dev)
{
	int ret;
	struct inv_mpu_iio_s *st = iio_priv(indio_dev);

	st->trig = iio_allocate_trigger("%s-dev%d",
					indio_dev->name,
					indio_dev->id);
	if (st->trig == NULL)
		return -ENOMEM;
	st->trig->dev.parent = &st->client->dev;
	st->trig->private_data = indio_dev;
	st->trig->ops = &inv_mpu_trigger_ops;
	ret = iio_trigger_register(st->trig);

	if (ret) {
		iio_free_trigger(st->trig);
		return -EPERM;
	}
	indio_dev->trig = st->trig;

	return 0;
}
Ejemplo n.º 19
0
static int iio_sysfs_trigger_remove(int id)
{
	bool foundit = false;
	struct iio_sysfs_trig *t;
	mutex_lock(&iio_syfs_trig_list_mut);
	list_for_each_entry(t, &iio_sysfs_trig_list, l)
		if (id == t->id) {
			foundit = true;
			break;
		}
	if (!foundit) {
		mutex_unlock(&iio_syfs_trig_list_mut);
		return -EINVAL;
	}

	iio_trigger_unregister(t->trig);
	iio_free_trigger(t->trig);

	list_del(&t->l);
	kfree(t);
	module_put(THIS_MODULE);
	mutex_unlock(&iio_syfs_trig_list_mut);
	return 0;
}
Ejemplo n.º 20
0
int lis3l02dq_probe_trigger(struct iio_dev *indio_dev)
{
	int ret;
	struct lis3l02dq_state *state = indio_dev->dev_data;

	state->trig = iio_allocate_trigger();
	if (!state->trig)
		return -ENOMEM;

	state->trig->name = kmalloc(IIO_TRIGGER_NAME_LENGTH, GFP_KERNEL);
	if (!state->trig->name) {
		ret = -ENOMEM;
		goto error_free_trig;
	}
	snprintf((char *)state->trig->name,
		 IIO_TRIGGER_NAME_LENGTH,
		 "lis3l02dq-dev%d", indio_dev->id);
	state->trig->dev.parent = &state->us->dev;
	state->trig->owner = THIS_MODULE;
	state->trig->private_data = state;
	state->trig->set_trigger_state = &lis3l02dq_data_rdy_trigger_set_state;
	state->trig->try_reenable = &lis3l02dq_trig_try_reen;
	state->trig->control_attrs = &lis3l02dq_trigger_attr_group;
	ret = iio_trigger_register(state->trig);
	if (ret)
		goto error_free_trig_name;

	return 0;

error_free_trig_name:
	kfree(state->trig->name);
error_free_trig:
	iio_free_trigger(state->trig);

	return ret;
}
Ejemplo n.º 21
0
static int optical_common_probe(struct iio_dev *indio_dev)
{
    int err = 0;
   struct optical_data *adata = iio_priv(indio_dev);
	printk (KERN_ALERT "[%s]\n", __FUNCTION__);  
    indio_dev->modes = INDIO_DIRECT_MODE;
    indio_dev->info = &optical_info;
#ifdef OPTICAL_SENSOR_DEBUG
	init_waitqueue_head(&proxWait);
	init_waitqueue_head(&lightWait);
	init_waitqueue_head(&hrWait);
#endif
	err = optical_check_device_support(indio_dev,
                ARRAY_SIZE(optical_sensors), optical_sensors);
    if (err < 0)
    {
        goto st_press_common_probe_error;
    }
    adata->multiread_bit = adata->sensor->multi_read_bit;
    indio_dev->channels = adata->sensor->ch;
    indio_dev->num_channels = 2;
    err = optical_init_sensor(indio_dev);
    if (err < 0)
    {
        goto st_press_common_probe_error;
    }
    if (adata->get_irq_data_ready(indio_dev) > 0)
    {
        err = optical_allocate_ring(indio_dev);
        if (err < 0)
        {	printk("vunggv error optical_allocate_ring-------");
            goto st_press_common_probe_error;
        }
        err = optical_allocate_trigger(indio_dev,&optical_trigger_ops);
        if (err < 0)
        {	printk("vunggv error optical_allocate_trigger------");
            goto st_press_probe_trigger_error;
        }

    }
    err = iio_device_register(indio_dev);
    if (err)
    {	printk("vunggv error iio_device_register------");
        goto st_press_device_register_error;
    }
	err = iio_ring_buffer_register_ex(indio_dev->ring, 0,
					  indio_dev->channels,
					  indio_dev->num_channels);
    if (err)
    {	printk("vunggv error iio_ring_register------");
        goto st_press_device_register_error;
    }
	printk (KERN_ALERT "[%s OK]\n", __FUNCTION__);  

#ifdef OPTICAL_SENSOR_DEBUG
	optical_set_enable(indio_dev, true);
#endif

    return err;

st_press_device_register_error:
    if (adata->get_irq_data_ready(indio_dev) > 0)
    {
      //  st_sensors_deallocate_trigger(indio_dev); //cho nay VungGV
    	//Vung them
    	iio_trigger_unregister(adata->trig);
    	free_irq(adata->get_irq_data_ready(indio_dev), adata->trig);
    	iio_free_trigger(adata->trig);
    }
st_press_probe_trigger_error:
    if (adata->get_irq_data_ready(indio_dev) > 0)
    {
        optical_deallocate_ring(indio_dev);
    }
st_press_common_probe_error:
    return err;
}
void ssp_iio_remove_trigger(struct iio_trigger *trig)
{
	iio_trigger_unregister(trig);
	iio_free_trigger(trig);
}