aw2013驱动分析

先看dtsi

aw2013@45 {
	compatible = "awinic,aw2013";
	reg = <0x45>;
	vdd-supply = <&pm8909_l17>;
	vcc-supply = <&pm8909_l6>;

	aw2013,red {
		aw2013,name = "red";
		aw2013,id = <0>;
		/*linux,default-trigger = "battery-charging";*/
		linux,default-trigger = "none";
		aw2013,max-brightness = <20>;
		aw2013,max-current = <1>;
		aw2013,rise-time-ms = <3>;
		aw2013,hold-time-ms = <3>;
		aw2013,fall-time-ms = <2>;
		aw2013,off-time-ms = <2>;
	};

probe函数:

1.ret = aw_2013_check_chipid(led_array);
2.ret = aw2013_led_parse_child_node(led_array, node);
3.ret = aw2013_power_init(led_array, true);

1.检查芯片是否正常,通过一次读写操作 aw2013_write()

2. 解析出子节点,并会添加一个队列,注册设备,创建一个组

        INIT_WORK(&led->brightness_work, aw2013_brightness_work);

		led->cdev.brightness_set = aw2013_set_brightness;

		rc = led_classdev_register(&led->client->dev, &led->cdev);
		if (rc) {
			dev_err(&led->client->dev,
				"unable to register led %d,rc=%d\n",
				led->id, rc);
			goto free_pdata;
		}

		rc = sysfs_create_group(&led->cdev.dev->kobj,
				&aw2013_led_attr_group);
		if (rc) {
			dev_err(&led->client->dev, "led sysfs rc: %d\n", rc);
			goto free_class;
		}

led->cdev.brightness_set会调用到aw2013_set_brightness,得到brightness,并且开始前面的队列函数

aw2013_brightness_work开始写入亮度值。

aw2013_led_attr_group,这个group创建了两个节点blink和led_time,aw2013_led_time_store函数会去调用aw2013_led_blink_set使之闪烁。

static DEVICE_ATTR(blink, 0664, NULL, aw2013_store_blink);
static DEVICE_ATTR(led_time, 0664, aw2013_led_time_show, aw2013_led_time_store);
static struct attribute *aw2013_led_attributes[] = {
	&dev_attr_blink.attr,
	&dev_attr_led_time.attr,
	NULL,
};

3.给芯片上电。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值