led子系统分析:源码核心层4. kernel-3.18\drivers\leds\trigger\ledtrig-timer.c

该博客详细介绍了Linux内核LED子系统中关于定时器触发器的实现,包括如何通过读写`/sys/class/leds/xxx/delay_on`和`delay_off`来控制LED闪烁延时。内容涉及led_blink_set、led_blink_setup等函数,以及mt65xx_blink_set、mt_pwm_power_on等与硬件交互的函数,展示了如何通过PWM模式控制LED的亮灭时间和频率。
摘要由CSDN通过智能技术生成
/*
应用层控制led的方法:
	读: cat /sys/class/leds/xxx/delay_on
	写: echo 255 > /sys/class/leds/xxx/delay_off

读 cat:
static ssize_t led_delay_on_show(struct device *dev, struct device_attribute *attr, char *buf)
	|
	return sprintf(buf, "%lu\n", led_cdev->blink_delay_on);

写 echo:
static ssize_t led_delay_on_store(struct device *dev, struct device_attribute *attr, const char *buf, size_t size)
	|
	kstrtoul(buf, 10, &state);
	led_blink_set(led_cdev, &state, &led_cdev->blink_delay_off);
	led_blink_set(struct led_classdev *led_cdev, unsigned long *delay_on, unsigned long *delay_off)
		|
		led_blink_setup(led_cdev, delay_on, delay_off);
			|
			led_cdev->blink_set(led_cdev, delay_on, delay_off)
						|
						//g_leds_data[i]->cdev.blink_set = mt65xx_blink_set;	// 函数指针
						mt65xx_blink_set(struct led_classdev *led_cdev, unsigned long *delay_on, unsigned long *delay_off)
							|
							if (mt_mt65xx_blink_set(led_cdev, delay_on, delay_off))
									|
									if (*delay_on != led_data->delay_on  || *delay_off != led_data->delay_off) {
									led_data->delay_on = *delay_on;								// delay_on() 指针
									led_data->delay_off = *delay_off;
									if (led_data->delay_on && led_data->delay_off) {	// enable blink 
										led_data->level = 255;	
										
										if (led_data->cust.mode == MT65XX_LED_MODE_PWM) {
											nled_tmp_setting.nled_mode = NLED_BLINK;
											nled_tmp_setting.blink_off_time = led_data->delay_off;	// delay_on() 指针
											nled_tmp_setting.blink_on_time = led_data->delay_on;
											mt_led_set_pwm(led_data->cust.data, &nled_tmp_setting);
												|
												pwm_setting.pwm_no = pwm_num;
												pwm_setting.mode = PWM_MODE_OLD;
												pwm_setting.clk_src = PWM_CLK_OLD_MODE_32K;
												switch (led->nled_mode) {
												case NLED_OFF:
													pwm_setting.PWM_MODE_OLD_REGS.THRESH = 0;
													pwm_setting.clk_div = CLK_DIV1;
													pwm_setting.PWM_MODE_OLD_REGS.DA
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值