mirror of
https://github.com/clockworkpi/Kernel.git
synced 2025-12-12 07:38:50 +01:00
171 lines
4.7 KiB
Diff
171 lines
4.7 KiB
Diff
diff --git a/drivers/input/misc/axp20x-pek.c b/drivers/input/misc/axp20x-pek.c
|
|
index 9c6386b2af33..6cf1ddda0788 100644
|
|
--- a/drivers/input/misc/axp20x-pek.c
|
|
+++ b/drivers/input/misc/axp20x-pek.c
|
|
@@ -215,10 +215,13 @@ static irqreturn_t axp20x_pek_irq(int irq, void *pwr)
|
|
* The power-button is connected to ground so a falling edge (dbf)
|
|
* means it is pressed.
|
|
*/
|
|
- if (irq == axp20x_pek->irq_dbf)
|
|
+ if (irq == axp20x_pek->irq_dbf) {
|
|
input_report_key(idev, KEY_POWER, true);
|
|
- else if (irq == axp20x_pek->irq_dbr)
|
|
+ msleep(100);
|
|
input_report_key(idev, KEY_POWER, false);
|
|
+ }
|
|
+ else if (irq == axp20x_pek->irq_dbr) {
|
|
+ }
|
|
|
|
input_sync(idev);
|
|
|
|
diff --git a/drivers/leds/leds-gpio.c b/drivers/leds/leds-gpio.c
|
|
index 092eb59a7d32..00ab1f315f6b 100644
|
|
--- a/drivers/leds/leds-gpio.c
|
|
+++ b/drivers/leds/leds-gpio.c
|
|
@@ -26,6 +26,8 @@ struct gpio_led_data {
|
|
gpio_blink_set_t platform_gpio_blink_set;
|
|
};
|
|
|
|
+static int leds_gpio_proc_init(const char *name);
|
|
+
|
|
static inline struct gpio_led_data *
|
|
cdev_to_gpio_led_data(struct led_classdev *led_cdev)
|
|
{
|
|
@@ -119,6 +121,8 @@ static int create_gpio_led(const struct gpio_led *template,
|
|
&init_data);
|
|
}
|
|
|
|
+ leds_gpio_proc_init(led_dat->cdev.name);
|
|
+
|
|
return ret;
|
|
}
|
|
|
|
@@ -127,6 +131,8 @@ struct gpio_leds_priv {
|
|
struct gpio_led_data leds[];
|
|
};
|
|
|
|
+static struct gpio_leds_priv *leds_priv;
|
|
+
|
|
static struct gpio_leds_priv *gpio_leds_create(struct platform_device *pdev)
|
|
{
|
|
struct device *dev = &pdev->dev;
|
|
@@ -181,6 +187,7 @@ static struct gpio_leds_priv *gpio_leds_create(struct platform_device *pdev)
|
|
priv->num_leds++;
|
|
}
|
|
|
|
+ leds_priv = priv;
|
|
return priv;
|
|
}
|
|
|
|
@@ -307,6 +314,82 @@ static struct platform_driver gpio_led_driver = {
|
|
|
|
module_platform_driver(gpio_led_driver);
|
|
|
|
+#ifdef CONFIG_PROC_FS
|
|
+
|
|
+#include <linux/proc_fs.h>
|
|
+#include <linux/uaccess.h>
|
|
+
|
|
+static char global_buffer[64];
|
|
+
|
|
+static int leds_gpio_proc_show(struct seq_file *m, void *v)
|
|
+{
|
|
+ seq_printf(m, "leds_gpio\n");
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+static int leds_gpio_proc_open(struct inode *inode, struct file *file)
|
|
+{
|
|
+ return single_open(file, leds_gpio_proc_show, NULL);
|
|
+}
|
|
+
|
|
+static int leds_gpio_proc_read(struct file * file, char __user * buf, size_t size, loff_t * loff)
|
|
+{
|
|
+ int value, len, i;
|
|
+
|
|
+ for(i = 0; i < leds_priv->num_leds; i++) {
|
|
+ if(strcmp(leds_priv->leds[i].cdev.name, file->f_path.dentry->d_iname) == 0) {
|
|
+ value = leds_priv->leds[i].cdev.brightness;
|
|
+ len = snprintf(global_buffer, sizeof(global_buffer), "%d\n", value);
|
|
+ return simple_read_from_buffer(buf, size, loff, global_buffer, len);
|
|
+ }
|
|
+ }
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+static int leds_gpio_proc_write(struct file * file, const char __user * buf, size_t size, loff_t * loff)
|
|
+{
|
|
+ int value, i;
|
|
+
|
|
+ if(copy_from_user(global_buffer, buf, size))
|
|
+ return -EFAULT;
|
|
+
|
|
+ global_buffer[size] = 0;
|
|
+ for(i = 0; i < leds_priv->num_leds; i++) {
|
|
+ if(strcmp(leds_priv->leds[i].cdev.name, file->f_path.dentry->d_iname) == 0) {
|
|
+ value = simple_strtol(global_buffer, 0, 10);
|
|
+ gpio_led_set(&leds_priv->leds[i].cdev, value);
|
|
+ leds_priv->leds[i].cdev.brightness = value;
|
|
+ break;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ return size;
|
|
+}
|
|
+
|
|
+static const struct proc_ops leds_gpio_proc_fops = {
|
|
+ .proc_open = leds_gpio_proc_open,
|
|
+ .proc_read = leds_gpio_proc_read,
|
|
+ .proc_write = leds_gpio_proc_write,
|
|
+ .proc_lseek = seq_lseek,
|
|
+ .proc_release = single_release,
|
|
+};
|
|
+
|
|
+static int leds_gpio_proc_init(const char *name)
|
|
+{
|
|
+ struct proc_dir_entry *r;
|
|
+ char buf[50];
|
|
+
|
|
+ sprintf(buf, "driver/%s", name);
|
|
+ r = proc_create(buf, S_IRWXUGO, NULL, &leds_gpio_proc_fops);
|
|
+ if (!r)
|
|
+ return -ENOMEM;
|
|
+ return 0;
|
|
+}
|
|
+#else
|
|
+static inline int leds_gpio_proc_init(const char *name) { return 0; }
|
|
+#endif /* CONFIG_PROC_FS */
|
|
+
|
|
MODULE_AUTHOR("Raphael Assenat <raph@8d.com>, Trent Piepho <tpiepho@freescale.com>");
|
|
MODULE_DESCRIPTION("GPIO LED driver");
|
|
MODULE_LICENSE("GPL");
|
|
diff --git a/drivers/mfd/axp20x.c b/drivers/mfd/axp20x.c
|
|
index 8161a5dc68e8..3b342db209dc 100644
|
|
--- a/drivers/mfd/axp20x.c
|
|
+++ b/drivers/mfd/axp20x.c
|
|
@@ -203,8 +203,8 @@ static const struct resource axp803_usb_power_supply_resources[] = {
|
|
};
|
|
|
|
static const struct resource axp22x_pek_resources[] = {
|
|
- DEFINE_RES_IRQ_NAMED(AXP22X_IRQ_PEK_RIS_EDGE, "PEK_DBR"),
|
|
- DEFINE_RES_IRQ_NAMED(AXP22X_IRQ_PEK_FAL_EDGE, "PEK_DBF"),
|
|
+ DEFINE_RES_IRQ_NAMED(AXP22X_IRQ_PEK_SHORT, "PEK_DBR"),
|
|
+ DEFINE_RES_IRQ_NAMED(AXP22X_IRQ_PEK_LONG, "PEK_DBF"),
|
|
};
|
|
|
|
static const struct resource axp288_power_button_resources[] = {
|
|
diff --git a/drivers/mfd/sun6i-prcm.c b/drivers/mfd/sun6i-prcm.c
|
|
index ee03db0b8485..a8c833df4f05 100644
|
|
--- a/drivers/mfd/sun6i-prcm.c
|
|
+++ b/drivers/mfd/sun6i-prcm.c
|
|
@@ -12,7 +12,7 @@
|
|
#include <linux/of.h>
|
|
|
|
#define SUN8I_CODEC_ANALOG_BASE 0x1c0
|
|
-#define SUN8I_CODEC_ANALOG_SIZE 0x4
|
|
+#define SUN8I_CODEC_ANALOG_SIZE 0x10
|
|
|
|
struct prcm_data {
|
|
int nsubdevs;
|