These changes are the raw update to linux-4.4.6-rt14. Kernel sources
[kvmfornfv.git] / kernel / drivers / gpio / gpio-max732x.c
index 0fa4543..8c5252c 100644 (file)
@@ -429,6 +429,14 @@ static int max732x_irq_set_type(struct irq_data *d, unsigned int type)
        return 0;
 }
 
+static int max732x_irq_set_wake(struct irq_data *data, unsigned int on)
+{
+       struct max732x_chip *chip = irq_data_get_irq_chip_data(data);
+
+       irq_set_irq_wake(chip->client->irq, on);
+       return 0;
+}
+
 static struct irq_chip max732x_irq_chip = {
        .name                   = "max732x",
        .irq_mask               = max732x_irq_mask,
@@ -436,6 +444,7 @@ static struct irq_chip max732x_irq_chip = {
        .irq_bus_lock           = max732x_irq_bus_lock,
        .irq_bus_sync_unlock    = max732x_irq_bus_sync_unlock,
        .irq_set_type           = max732x_irq_set_type,
+       .irq_set_wake           = max732x_irq_set_wake,
 };
 
 static uint8_t max732x_irq_pending(struct max732x_chip *chip)
@@ -507,12 +516,10 @@ static int max732x_irq_setup(struct max732x_chip *chip,
                chip->irq_features = has_irq;
                mutex_init(&chip->irq_lock);
 
-               ret = devm_request_threaded_irq(&client->dev,
-                                       client->irq,
-                                       NULL,
-                                       max732x_irq_handler,
-                                       IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
-                                       dev_name(&client->dev), chip);
+               ret = devm_request_threaded_irq(&client->dev, client->irq,
+                               NULL, max732x_irq_handler, IRQF_ONESHOT |
+                               IRQF_TRIGGER_FALLING | IRQF_SHARED,
+                               dev_name(&client->dev), chip);
                if (ret) {
                        dev_err(&client->dev, "failed to request irq %d\n",
                                client->irq);
@@ -521,7 +528,7 @@ static int max732x_irq_setup(struct max732x_chip *chip,
                ret =  gpiochip_irqchip_add(&chip->gpio_chip,
                                            &max732x_irq_chip,
                                            irq_base,
-                                           handle_edge_irq,
+                                           handle_simple_irq,
                                            IRQ_TYPE_NONE);
                if (ret) {
                        dev_err(&client->dev,
@@ -596,6 +603,7 @@ static int max732x_setup_gpio(struct max732x_chip *chip,
        gc->base = gpio_start;
        gc->ngpio = port;
        gc->label = chip->client->name;
+       gc->dev = &chip->client->dev;
        gc->owner = THIS_MODULE;
 
        return port;
@@ -677,9 +685,14 @@ static int max732x_probe(struct i2c_client *client,
 
        mutex_init(&chip->lock);
 
-       max732x_readb(chip, is_group_a(chip, 0), &chip->reg_out[0]);
-       if (nr_port > 8)
-               max732x_readb(chip, is_group_a(chip, 8), &chip->reg_out[1]);
+       ret = max732x_readb(chip, is_group_a(chip, 0), &chip->reg_out[0]);
+       if (ret)
+               goto out_failed;
+       if (nr_port > 8) {
+               ret = max732x_readb(chip, is_group_a(chip, 8), &chip->reg_out[1]);
+               if (ret)
+                       goto out_failed;
+       }
 
        ret = gpiochip_add(&chip->gpio_chip);
        if (ret)