515_power.patch 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. diff --git a/drivers/input/misc/axp20x-pek.c b/drivers/input/misc/axp20x-pek.c
  2. index 9c6386b2af33..6cf1ddda0788 100644
  3. --- a/drivers/input/misc/axp20x-pek.c
  4. +++ b/drivers/input/misc/axp20x-pek.c
  5. @@ -215,10 +215,13 @@ static irqreturn_t axp20x_pek_irq(int irq, void *pwr)
  6. * The power-button is connected to ground so a falling edge (dbf)
  7. * means it is pressed.
  8. */
  9. - if (irq == axp20x_pek->irq_dbf)
  10. + if (irq == axp20x_pek->irq_dbf) {
  11. input_report_key(idev, KEY_POWER, true);
  12. - else if (irq == axp20x_pek->irq_dbr)
  13. + msleep(100);
  14. input_report_key(idev, KEY_POWER, false);
  15. + }
  16. + else if (irq == axp20x_pek->irq_dbr) {
  17. + }
  18. input_sync(idev);
  19. diff --git a/drivers/leds/leds-gpio.c b/drivers/leds/leds-gpio.c
  20. index 092eb59a7d32..00ab1f315f6b 100644
  21. --- a/drivers/leds/leds-gpio.c
  22. +++ b/drivers/leds/leds-gpio.c
  23. @@ -26,6 +26,8 @@ struct gpio_led_data {
  24. gpio_blink_set_t platform_gpio_blink_set;
  25. };
  26. +static int leds_gpio_proc_init(const char *name);
  27. +
  28. static inline struct gpio_led_data *
  29. cdev_to_gpio_led_data(struct led_classdev *led_cdev)
  30. {
  31. @@ -119,6 +121,8 @@ static int create_gpio_led(const struct gpio_led *template,
  32. &init_data);
  33. }
  34. + leds_gpio_proc_init(led_dat->cdev.name);
  35. +
  36. return ret;
  37. }
  38. @@ -127,6 +131,8 @@ struct gpio_leds_priv {
  39. struct gpio_led_data leds[];
  40. };
  41. +static struct gpio_leds_priv *leds_priv;
  42. +
  43. static struct gpio_leds_priv *gpio_leds_create(struct platform_device *pdev)
  44. {
  45. struct device *dev = &pdev->dev;
  46. @@ -181,6 +187,7 @@ static struct gpio_leds_priv *gpio_leds_create(struct platform_device *pdev)
  47. priv->num_leds++;
  48. }
  49. + leds_priv = priv;
  50. return priv;
  51. }
  52. @@ -307,6 +314,82 @@ static struct platform_driver gpio_led_driver = {
  53. module_platform_driver(gpio_led_driver);
  54. +#ifdef CONFIG_PROC_FS
  55. +
  56. +#include <linux/proc_fs.h>
  57. +#include <linux/uaccess.h>
  58. +
  59. +static char global_buffer[64];
  60. +
  61. +static int leds_gpio_proc_show(struct seq_file *m, void *v)
  62. +{
  63. + seq_printf(m, "leds_gpio\n");
  64. + return 0;
  65. +}
  66. +
  67. +static int leds_gpio_proc_open(struct inode *inode, struct file *file)
  68. +{
  69. + return single_open(file, leds_gpio_proc_show, NULL);
  70. +}
  71. +
  72. +static int leds_gpio_proc_read(struct file * file, char __user * buf, size_t size, loff_t * loff)
  73. +{
  74. + int value, len, i;
  75. +
  76. + for(i = 0; i < leds_priv->num_leds; i++) {
  77. + if(strcmp(leds_priv->leds[i].cdev.name, file->f_path.dentry->d_iname) == 0) {
  78. + value = leds_priv->leds[i].cdev.brightness;
  79. + len = snprintf(global_buffer, sizeof(global_buffer), "%d\n", value);
  80. + return simple_read_from_buffer(buf, size, loff, global_buffer, len);
  81. + }
  82. + }
  83. +
  84. + return 0;
  85. +}
  86. +
  87. +static int leds_gpio_proc_write(struct file * file, const char __user * buf, size_t size, loff_t * loff)
  88. +{
  89. + int value, i;
  90. +
  91. + if(copy_from_user(global_buffer, buf, size))
  92. + return -EFAULT;
  93. +
  94. + global_buffer[size] = 0;
  95. + for(i = 0; i < leds_priv->num_leds; i++) {
  96. + if(strcmp(leds_priv->leds[i].cdev.name, file->f_path.dentry->d_iname) == 0) {
  97. + value = simple_strtol(global_buffer, 0, 10);
  98. + gpio_led_set(&leds_priv->leds[i].cdev, value);
  99. + leds_priv->leds[i].cdev.brightness = value;
  100. + break;
  101. + }
  102. + }
  103. +
  104. + return size;
  105. +}
  106. +
  107. +static const struct proc_ops leds_gpio_proc_fops = {
  108. + .proc_open = leds_gpio_proc_open,
  109. + .proc_read = leds_gpio_proc_read,
  110. + .proc_write = leds_gpio_proc_write,
  111. + .proc_lseek = seq_lseek,
  112. + .proc_release = single_release,
  113. +};
  114. +
  115. +static int leds_gpio_proc_init(const char *name)
  116. +{
  117. + struct proc_dir_entry *r;
  118. + char buf[50];
  119. +
  120. + sprintf(buf, "driver/%s", name);
  121. + r = proc_create(buf, S_IRWXUGO, NULL, &leds_gpio_proc_fops);
  122. + if (!r)
  123. + return -ENOMEM;
  124. + return 0;
  125. +}
  126. +#else
  127. +static inline int leds_gpio_proc_init(const char *name) { return 0; }
  128. +#endif /* CONFIG_PROC_FS */
  129. +
  130. MODULE_AUTHOR("Raphael Assenat <raph@8d.com>, Trent Piepho <tpiepho@freescale.com>");
  131. MODULE_DESCRIPTION("GPIO LED driver");
  132. MODULE_LICENSE("GPL");
  133. diff --git a/drivers/mfd/axp20x.c b/drivers/mfd/axp20x.c
  134. index 8161a5dc68e8..3b342db209dc 100644
  135. --- a/drivers/mfd/axp20x.c
  136. +++ b/drivers/mfd/axp20x.c
  137. @@ -203,8 +203,8 @@ static const struct resource axp803_usb_power_supply_resources[] = {
  138. };
  139. static const struct resource axp22x_pek_resources[] = {
  140. - DEFINE_RES_IRQ_NAMED(AXP22X_IRQ_PEK_RIS_EDGE, "PEK_DBR"),
  141. - DEFINE_RES_IRQ_NAMED(AXP22X_IRQ_PEK_FAL_EDGE, "PEK_DBF"),
  142. + DEFINE_RES_IRQ_NAMED(AXP22X_IRQ_PEK_SHORT, "PEK_DBR"),
  143. + DEFINE_RES_IRQ_NAMED(AXP22X_IRQ_PEK_LONG, "PEK_DBF"),
  144. };
  145. static const struct resource axp288_power_button_resources[] = {
  146. diff --git a/drivers/mfd/sun6i-prcm.c b/drivers/mfd/sun6i-prcm.c
  147. index ee03db0b8485..a8c833df4f05 100644
  148. --- a/drivers/mfd/sun6i-prcm.c
  149. +++ b/drivers/mfd/sun6i-prcm.c
  150. @@ -12,7 +12,7 @@
  151. #include <linux/of.h>
  152. #define SUN8I_CODEC_ANALOG_BASE 0x1c0
  153. -#define SUN8I_CODEC_ANALOG_SIZE 0x4
  154. +#define SUN8I_CODEC_ANALOG_SIZE 0x10
  155. struct prcm_data {
  156. int nsubdevs;