Linux Back Light driver
来源:互联网 发布:园长妈妈软件下载 编辑:程序博客网 时间:2024/06/05 03:12
/linux/drvices/leds/leds-lm3530.c
1、prob
static int lm3530_probe(struct i2c_client *client, const struct i2c_device_id *id){struct lm3530_platform_data *pdata = dev_get_platdata(&client->dev);struct lm3530_data *drvdata;int err = 0;if (pdata == NULL) {dev_err(&client->dev, "platform data required\n");return -ENODEV;}/* BL mode */if (pdata->mode > LM3530_BL_MODE_PWM) {dev_err(&client->dev, "Illegal Mode request\n");return -EINVAL;}if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) {dev_err(&client->dev, "I2C_FUNC_I2C not supported\n");return -EIO;}drvdata = devm_kzalloc(&client->dev, sizeof(struct lm3530_data),GFP_KERNEL);if (drvdata == NULL)return -ENOMEM;drvdata->mode = pdata->mode;drvdata->client = client;drvdata->pdata = pdata;drvdata->brightness = LED_OFF;drvdata->enable = false;drvdata->led_dev.name = LM3530_LED_DEV;drvdata->led_dev.brightness_set = lm3530_brightness_set;drvdata->led_dev.max_brightness = MAX_BRIGHTNESS;i2c_set_clientdata(client, drvdata);drvdata->regulator = devm_regulator_get(&client->dev, "vin");if (IS_ERR(drvdata->regulator)) {dev_err(&client->dev, "regulator get failed\n");err = PTR_ERR(drvdata->regulator);drvdata->regulator = NULL;return err;}if (drvdata->pdata->brt_val) {err = lm3530_init_registers(drvdata);if (err < 0) {dev_err(&client->dev,"Register Init failed: %d\n", err);return err;}}err = led_classdev_register(&client->dev, &drvdata->led_dev);if (err < 0) {dev_err(&client->dev, "Register led class failed: %d\n", err);return err;}err = device_create_file(drvdata->led_dev.dev, &dev_attr_mode);if (err < 0) {dev_err(&client->dev, "File device creation failed: %d\n", err);err = -ENODEV;goto err_create_file;}return 0;err_create_file:led_classdev_unregister(&drvdata->led_dev);return err;}
2、brightness_set
static void lm3530_brightness_set(struct led_classdev *led_cdev, enum led_brightness brt_val){int err;struct lm3530_data *drvdata = container_of(led_cdev, struct lm3530_data, led_dev);struct lm3530_platform_data *pdata = drvdata->pdata;struct lm3530_pwm_data *pwm = &pdata->pwm_data;u8 max_brightness = led_cdev->max_brightness;switch (drvdata->mode) {case LM3530_BL_MODE_MANUAL:if (!drvdata->enable) {err = lm3530_init_registers(drvdata);if (err) {dev_err(&drvdata->client->dev,"Register Init failed: %d\n", err);break;}}/* set the brightness in brightness control register*/err = i2c_smbus_write_byte_data(drvdata->client,LM3530_BRT_CTRL_REG, brt_val);if (err)dev_err(&drvdata->client->dev,"Unable to set brightness: %d\n", err);elsedrvdata->brightness = brt_val;if (brt_val == 0)lm3530_led_disable(drvdata);break;case LM3530_BL_MODE_ALS:break;case LM3530_BL_MODE_PWM:if (pwm->pwm_set_intensity)pwm->pwm_set_intensity(brt_val, max_brightness);break;default:break;}}
/linux/drvices/leds/leds-class.c
3、led_classdev_register
/** * led_classdev_register - register a new object of led_classdev class. * @parent: The device to register. * @led_cdev: the led_classdev structure for this device. */int led_classdev_register(struct device *parent, struct led_classdev *led_cdev){led_cdev->dev = device_create(leds_class, parent, 0, led_cdev, "%s", led_cdev->name);if (IS_ERR(led_cdev->dev))return PTR_ERR(led_cdev->dev);#ifdef CONFIG_LEDS_TRIGGERSinit_rwsem(&led_cdev->trigger_lock);#endif/* add to the list of leds */down_write(&leds_list_lock);list_add_tail(&led_cdev->node, &leds_list);up_write(&leds_list_lock);if (!led_cdev->max_brightness)led_cdev->max_brightness = LED_FULL;led_update_brightness(led_cdev);INIT_WORK(&led_cdev->set_brightness_work, set_brightness_delayed);init_timer(&led_cdev->blink_timer);led_cdev->blink_timer.function = led_timer_function;led_cdev->blink_timer.data = (unsigned long)led_cdev;#ifdef CONFIG_LEDS_TRIGGERSled_trigger_set_default(led_cdev);#endifdev_dbg(parent, "Registered led device: %s\n",led_cdev->name);return 0;}EXPORT_SYMBOL_GPL(led_classdev_register);
0 0
- Linux Back Light driver
- Light OJ 1009 - Back to Underworld
- Light 1009 - Back to Underworld (dfs)
- Linux driver
- linux driver
- Linux Driver
- linux driver
- linux kernel, driver, network driver
- back to linux
- back track linux
- android button light 流程分析(一) — driver
- android button light 流程分析(一) — driver
- android button light 流程分析(一) — driver
- linux device driver
- Driver, of WinCE & Linux
- x1300 driver on Linux
- dm9000 linux driver 问题
- Linux i2c bus driver
- LinuxCon 2015 亮点回顾
- 如何快速提高网站关键词排名(实战篇)
- [leetcode] 58.Length of Last Word
- 关于Webbrowser针对网银控件显示不正常的一个解决思路。
- Activiti 邮件任务
- Linux Back Light driver
- java读取word表格导入数据库,支持doc、docx
- Android中EditText实现不可编辑解决办法
- vs工程链接出现error LNK2005...already defined
- ASP 在网页中 打开PDF文件
- spring的生命周期
- Error deleting volume
- UML类图中的4种关系
- android textview里面显示图文混排