コード例 #1
0
void switch_dev_unregister(struct switch_dev *sdev)
{
	class_device_remove_file(sdev->cdev, &class_device_attr_name);
	class_device_remove_file(sdev->cdev, &class_device_attr_state);
	class_device_destroy(switch_class, MKDEV(0, sdev->index));
	class_set_devdata(sdev->cdev, NULL);
}
コード例 #2
0
static void deactive_work_handle(struct work_struct *work)
{
	struct timer_trig_data *timer_data = container_of(work, struct timer_trig_data, deactive_work);
	struct led_classdev *led_cdev = timer_data->led_cdev;

	class_device_remove_file(led_cdev->class_dev,
				 &class_device_attr_delay_on);
	class_device_remove_file(led_cdev->class_dev,
				 &class_device_attr_delay_off);
	kfree(timer_data);
}
コード例 #3
0
ファイル: ledtrig-timer.c プロジェクト: 3sOx/asuswrt-merlin
static void timer_trig_deactivate(struct led_classdev *led_cdev)
{
	struct timer_trig_data *timer_data = led_cdev->trigger_data;

	if (timer_data) {
		class_device_remove_file(led_cdev->class_dev,
					&class_device_attr_delay_on);
		class_device_remove_file(led_cdev->class_dev,
					&class_device_attr_delay_off);
		del_timer_sync(&timer_data->timer);
		kfree(timer_data);
	}
}
コード例 #4
0
static void hwtimer_trig_deactivate(struct led_classdev *led_cdev)
{
	struct hwtimer_data *timer_data = led_cdev->trigger_data;

	if (timer_data) {
		class_device_remove_file(led_cdev->class_dev,
					&class_device_attr_delay_on);
		class_device_remove_file(led_cdev->class_dev,
					&class_device_attr_delay_off);
		kfree(timer_data);
	}

	led_cdev->trigger_data = NULL;
	return;
}
コード例 #5
0
static void hwtimer_trig_activate(struct led_classdev *led_cdev)
{
	int err;
	struct hwtimer_data *timer_data;

	timer_data = kzalloc(sizeof(struct hwtimer_data), GFP_KERNEL);
	if (!timer_data) {
		led_cdev->trigger_data = NULL;
		return;
	}

	timer_data->delay_on = 1000;
	timer_data->delay_off = 1000;

	led_cdev->trigger_data = timer_data;

	err = class_device_create_file(led_cdev->class_dev,
	                               &class_device_attr_delay_on);
	if (err) goto err_delay_on;

	err = class_device_create_file(led_cdev->class_dev,
	                               &class_device_attr_delay_off);
	if (err) goto err_delay_off;

	return;

err_delay_off:
	class_device_remove_file(led_cdev->class_dev,
	                         &class_device_attr_delay_on);
err_delay_on:
	led_cdev->trigger_data = NULL;
	kfree(timer_data);
	printk(KERN_ERR "ledtrig-hwtimer: activate failed\n");
	return;
}
コード例 #6
0
int switch_dev_register(struct switch_dev *sdev)
{
	int ret;

	if (!switch_class) {
		ret = create_switch_class();
		if (ret < 0)
			return ret;
	}

	sdev->index = atomic_inc_return(&device_count);
	sdev->cdev = class_device_create(switch_class, NULL,
		MKDEV(0, sdev->index), NULL, sdev->name);
	if (IS_ERR(sdev->cdev))
		return PTR_ERR(sdev->cdev);

	ret = class_device_create_file(sdev->cdev, &class_device_attr_state);
	if (ret < 0)
		goto err_create_file_1;
	ret = class_device_create_file(sdev->cdev, &class_device_attr_name);
	if (ret < 0)
		goto err_create_file_2;

	class_set_devdata(sdev->cdev, sdev);
	sdev->state = 0;
	return 0;

err_create_file_2:
	class_device_remove_file(sdev->cdev, &class_device_attr_state);
err_create_file_1:
	class_device_destroy(switch_class, MKDEV(0, sdev->index));
	printk(KERN_ERR "switch: Failed to register driver %s\n", sdev->name);

	return ret;
}
コード例 #7
0
ファイル: tbase.c プロジェクト: joyforu/android-ltp-ndk
/*
 * test_classdev_reg
 *	make test call to class_device_register
 *	and if that returns successful then
 *	make call to class_device_unregister
 */
static int test_classdev_reg() {
	int rc = 0;

	if (class_device_register(&test_class_dev)) {
		printk("tbase: Failed to register class device\n");
		rc = 1;
	}
	else {
		printk("tbase: Registered class device\n");

		/* make class device sysfs file */
		if (class_device_create_file(&test_class_dev, &class_device_attr_test_id)) {
			rc = 1;
			printk("tbase: Failed to create class device sysfs file\n");
		}
		else {
			printk("tbase: Created class device sysfs file\n");
			class_device_remove_file(&test_class_dev, &class_device_attr_test_id);
		}

		class_device_unregister(&test_class_dev);
	}

	return rc;
}
コード例 #8
0
ファイル: ledtrig-timer.c プロジェクト: 3sOx/asuswrt-merlin
static void timer_trig_activate(struct led_classdev *led_cdev)
{
	struct timer_trig_data *timer_data;
	int rc;

	timer_data = kzalloc(sizeof(struct timer_trig_data), GFP_KERNEL);
	if (!timer_data)
		return;

	led_cdev->trigger_data = timer_data;

	init_timer(&timer_data->timer);
	timer_data->timer.function = led_timer_function;
	timer_data->timer.data = (unsigned long) led_cdev;

	rc = class_device_create_file(led_cdev->class_dev,
				&class_device_attr_delay_on);
	if (rc) goto err_out;
	rc = class_device_create_file(led_cdev->class_dev,
				&class_device_attr_delay_off);
	if (rc) goto err_out_delayon;

	return;

err_out_delayon:
	class_device_remove_file(led_cdev->class_dev,
				&class_device_attr_delay_on);
err_out:
	led_cdev->trigger_data = NULL;
	kfree(timer_data);
}
コード例 #9
0
ファイル: leds-omap-pwm.c プロジェクト: mrtos/Logitech-Revue
static int omap_pwm_led_remove(struct platform_device *pdev)
{
	struct omap_pwm_led *led = pdev_to_omap_pwm_led(pdev);

	class_device_remove_file(led->cdev.class_dev,
				 &class_device_attr_on_period);
	class_device_remove_file(led->cdev.class_dev,
				 &class_device_attr_off_period);
	led_classdev_unregister(&led->cdev);

	omap_pwm_led_set(&led->cdev, LED_OFF);
	if (led->blink_timer != NULL)
		omap_dm_timer_free(led->blink_timer);
	omap_dm_timer_free(led->intensity_timer);
	kfree(led);

	return 0;
}
コード例 #10
0
ファイル: led-class.c プロジェクト: FatSunHYS/OSCourseDesign
/**
 * led_classdev_unregister - unregisters a object of led_properties class.
 * @led_cdev: the led device to unreigister
 *
 * Unregisters a previously registered via led_classdev_register object.
 */
void led_classdev_unregister(struct led_classdev *led_cdev)
{
	class_device_remove_file(led_cdev->class_dev,
				&class_device_attr_brightness);
#ifdef CONFIG_LEDS_TRIGGERS
	class_device_remove_file(led_cdev->class_dev,
				&class_device_attr_trigger);
	write_lock(&led_cdev->trigger_lock);
	if (led_cdev->trigger)
		led_trigger_set(led_cdev, NULL);
	write_unlock(&led_cdev->trigger_lock);
#endif

	class_device_unregister(led_cdev->class_dev);

	write_lock(&leds_list_lock);
	list_del(&led_cdev->node);
	write_unlock(&leds_list_lock);
}
コード例 #11
0
static void __devexit pccard_sysfs_remove_rsrc(struct class_device *class_dev)
{
	struct pcmcia_socket *s = class_get_devdata(class_dev);
	struct class_device_attribute **attr;

	if (s->resource_ops != &pccard_nonstatic_ops)
		return;

	for (attr = pccard_rsrc_attributes; *attr; attr++)
		class_device_remove_file(class_dev, *attr);
}
コード例 #12
0
static void rtc_sysfs_remove_device(struct class_device *class_dev,
				struct class_interface *class_intf)
{
	if (rtc_does_wakealarm(class_dev))
		class_device_remove_file(class_dev,
				&class_device_attr_wakealarm);
#ifdef CONFIG_RTC_WAKERS
	if (rtc_does_wakealarm(class_dev))
		wakers_unregister(class_dev);
#endif
	sysfs_remove_group(&class_dev->kobj, &rtc_attr_group);
}
コード例 #13
0
ファイル: dvblo_char.c プロジェクト: jacksonmv/txsuite
static int dvblo_chardev_release(struct dvblo_chardev *chardev)
{
	int rv = SUCCESS, i;
	if(chardev->used == 0) {
		rv = -EINVAL;
	} else if(chardev->hcount > 0) {
		rv = -EAGAIN;
	} else {
		if(chardev->initdone != 0)
			dprintk(0, "releasing char device with minor device number %u\n", chardev->minor);
		switch(chardev->initlev)
		{
			case 3:
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,13)
			for(i=0; i<(sizeof(clsdev_attrs)/sizeof(clsdev_attrs[0])) && rv == SUCCESS; i++)
				class_device_remove_file(chardev->clsdev, &clsdev_attrs[i]);
#endif
			case 2:
#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,13)
				class_device_destroy(dvblo_class, MKDEV(dvblo_char_major, chardev->minor));
#else
				/* The old-style "simple" class API */
				class_simple_device_remove(MKDEV(dvblo_char_major, chardev->minor));
#endif
			case 1:
				i = dvblo_adap_destroy(chardev->dvblo);
				if(i < 0) {
					mprintk(KERN_ALERT, "failed to destroy virtual DVB adapter: %d\n", i);
					if(rv == 0)
						rv = i;
				}
			default:
				break;
		}
		if(chardev->initdone != 0)		
			mprintk(KERN_INFO, "removed character device %s\n", chardev->name);
		chardev->initlev = 0;
		chardev->initdone = 0;
		chardev->used = 0;
	}
	return rv;
}
コード例 #14
0
static void active_work_handle(struct work_struct *work)
{
	int rc;
	struct timer_trig_data *timer_data = container_of(work, struct timer_trig_data, active_work);
	struct led_classdev *led_cdev = timer_data->led_cdev;
	
	rc = class_device_create_file(led_cdev->class_dev,
				      &class_device_attr_delay_on);
	if (rc) goto err_out;
	rc = class_device_create_file(led_cdev->class_dev,
				      &class_device_attr_delay_off);
	if (rc) goto err_out_delayon;

	return;

err_out_delayon:
	class_device_remove_file(led_cdev->class_dev,
				&class_device_attr_delay_on);
err_out:
	led_cdev->trigger_data = NULL;
	kfree(timer_data);
	BUG();
}