基于rk3128的leds灯闪问题

2019-07-14 00:14发布

http://blog.csdn.net/wangjianzhongfj/article/details/42764437
http://www.docin.com/p-970537368.html
rk3128原生安卓代码里。按红外遥控器的时候,灯是不闪的。在这里,我把如何进行灯闪的问题解决一下。哈! 在kernelsrcarcharmootdts k3128-box-rk88.dts增加gpio控制led的节点 rockchip_leds_gpio {         compatible = "rockchip-leds-gpio"; led-gpios = <&gpio0 GPIO_D2 GPIO_ACTIVE_LOW>, <&gpio0 GPIO_B0 GPIO_ACTIVE_LOW>; status = "okay"; };  gpio_poweroff { compatible = "gpio-poweroff"; gpios = <&gpio1 GPIO_A2 GPIO_ACTIVE_LOW>; }; 在kernelsrcarcharmconfigs ockchip_defconfig里,配置leds。

CONFIG_LEDS_TRIGGERS=y CONFIG_LEDS_TRIGGER_BACKLIGHT=y CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
然后增加代码目录路径    kernelsrcdriversleds ockchip-leds-gpio.c [javascript] view plain copy  在CODE上查看代码片派生到我的代码片
  1. /* 
  2.  * LEDs driver for GPIOs 
  3.  * 
  4.  * Copyright (C) 2007 8D Technologies inc. 
  5.  * Raphael Assenat  
  6.  * Copyright (C) 2008 Freescale Semiconductor, Inc. 
  7.  * 
  8.  * This program is free software; you can redistribute it and/or modify 
  9.  * it under the terms of the GNU General Public License version 2 as 
  10.  * published by the Free Software Foundation. 
  11.  * 
  12.  */  
  13. #include   
  14. #include   
  15. #include   
  16. #include   
  17. #include   
  18. #include   
  19. #include   
  20. #include   
  21. #include   
  22. #include   
  23. #include   
  24. #include   
  25. #include   
  26.  
  27. #define TAG "ROCKCHIP_LEDS_GPIO"  
  28. #if 0  
  29. #define D(fmt, arg...) printk("D>>> %s->%s(%d): " fmt, TAG, __FUNCTION__, __LINE__, ##arg)  
  30. #else  
  31. #define D(fmt, arg...)  
  32. #endif  
  33. #define E(fmt, arg...) printk("E>>> %s->%s(%d): " fmt, TAG, __FUNCTION__, __LINE__, ##arg)  
  34. #define I(fmt, arg...) printk("I>>> %s->%s(%d): " fmt, TAG, __FUNCTION__, __LINE__, ##arg)  
  35.  
  36. #define GPIO_LOW        0  
  37. #define GPIO_HIGH       1  
  38.  
  39. #define LED_ON          0  
  40. #define LED_OFF         1  
  41.   
  42. struct rk_gpio_leds_ctl_io {  
  43.     unsigned int power_green;  
  44.     unsigned int power_red;  
  45.       
  46.     unsigned int ir_red;  
  47. };  
  48.   
  49. struct rk_gpio_leds_priv {  
  50.     struct rk_gpio_leds_ctl_io leds;  
  51.     struct timer_list led_timer;  
  52.     unsigned int ir_red_status;  
  53.     unsigned int ir_red_first_resume;  
  54.     unsigned int suspend_state;   
  55. };  
  56.   
  57. struct rk_gpio_leds_priv *g_privdata = NULL;  
  58.   
  59. static ssize_t led_store(struct device *dev, struct device_attribute *attr, const char *cmd, size_t count)  
  60. {  
  61.     struct platform_device *pdev = to_platform_device(dev);  
  62.     struct rk_gpio_leds_priv *priv = platform_get_drvdata(pdev);  
  63.       
  64.     // I("led_store(): cmd = %s  ", cmd);  
  65.       
  66.     if (true == priv->suspend_state)  
  67.     {  
  68.         return count;  
  69.     }  
  70.   
  71.     if(0 == strcmp("IR_LED_ON", cmd))  
  72.     {  
  73.         gpio_set_value(priv->leds.ir_red, GPIO_HIGH);  
  74.     }  
  75.     else if(0 == strcmp("IR_LED_OFF", cmd))  
  76.     {  
  77.         gpio_set_value(priv->leds.ir_red, GPIO_LOW);  
  78.     }  
  79.       
  80.     return count;  
  81. }  
  82. static ssize_t led_show(struct device *dev, struct device_attribute *attr, char *buf)  
  83. {     
  84.     return 0;   
  85. }  
  86. static DEVICE_ATTR(led_ctl, 0777, led_show, led_store);  
  87.   
  88.   
  89. static void rk_gpio_led_early_suspend(void)  
  90. {  
  91.     struct rk_gpio_leds_priv *priv = g_privdata;  
  92.       
  93.     if (priv)  
  94.     {  
  95.         //POWER_LED_RED  
  96.         gpio_set_value(priv->leds.power_green, GPIO_LOW);  
  97.         gpio_set_value(priv->leds.power_red, GPIO_HIGH);  
  98.     }  
  99.       
  100.     return;  
  101. }  
  102.   
  103. static void rk_gpio_led_early_resume(void)  
  104. {  
  105.     struct rk_gpio_leds_priv *priv = g_privdata;