diff options
| -rw-r--r-- | drivers/gpio/Kconfig | 2 | ||||
| -rw-r--r-- | drivers/gpio/gpio-adp5588.c | 2 | ||||
| -rw-r--r-- | drivers/gpio/gpio-samsung.c | 16 | ||||
| -rw-r--r-- | drivers/gpio/gpio-sodaville.c | 23 | ||||
| -rw-r--r-- | drivers/hwmon/acpi_power_meter.c | 1 | ||||
| -rw-r--r-- | drivers/hwmon/pmbus/pmbus_core.c | 17 | ||||
| -rw-r--r-- | drivers/hwmon/smsc47b397.c | 14 | ||||
| -rw-r--r-- | drivers/hwmon/smsc47m1.c | 19 | ||||
| -rw-r--r-- | drivers/of/gpio.c | 2 | ||||
| -rw-r--r-- | drivers/spi/spi-davinci.c | 6 | ||||
| -rw-r--r-- | drivers/spi/spi-fsl-spi.c | 4 | ||||
| -rw-r--r-- | drivers/spi/spi-imx.c | 12 | ||||
| -rw-r--r-- | include/linux/amba/pl022.h | 2 |
13 files changed, 64 insertions, 56 deletions
diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig index edadbdad31d0..e03653d69357 100644 --- a/drivers/gpio/Kconfig +++ b/drivers/gpio/Kconfig | |||
| @@ -430,7 +430,7 @@ config GPIO_ML_IOH | |||
| 430 | 430 | ||
| 431 | config GPIO_SODAVILLE | 431 | config GPIO_SODAVILLE |
| 432 | bool "Intel Sodaville GPIO support" | 432 | bool "Intel Sodaville GPIO support" |
| 433 | depends on X86 && PCI && OF && BROKEN | 433 | depends on X86 && PCI && OF |
| 434 | select GPIO_GENERIC | 434 | select GPIO_GENERIC |
| 435 | select GENERIC_IRQ_CHIP | 435 | select GENERIC_IRQ_CHIP |
| 436 | help | 436 | help |
diff --git a/drivers/gpio/gpio-adp5588.c b/drivers/gpio/gpio-adp5588.c index 9ad1703d1408..ae5d7f12ce66 100644 --- a/drivers/gpio/gpio-adp5588.c +++ b/drivers/gpio/gpio-adp5588.c | |||
| @@ -252,7 +252,7 @@ static irqreturn_t adp5588_irq_handler(int irq, void *devid) | |||
| 252 | if (ret < 0) | 252 | if (ret < 0) |
| 253 | memset(dev->irq_stat, 0, ARRAY_SIZE(dev->irq_stat)); | 253 | memset(dev->irq_stat, 0, ARRAY_SIZE(dev->irq_stat)); |
| 254 | 254 | ||
| 255 | for (bank = 0; bank <= ADP5588_BANK(ADP5588_MAXGPIO); | 255 | for (bank = 0, bit = 0; bank <= ADP5588_BANK(ADP5588_MAXGPIO); |
| 256 | bank++, bit = 0) { | 256 | bank++, bit = 0) { |
| 257 | pending = dev->irq_stat[bank] & dev->irq_mask[bank]; | 257 | pending = dev->irq_stat[bank] & dev->irq_mask[bank]; |
| 258 | 258 | ||
diff --git a/drivers/gpio/gpio-samsung.c b/drivers/gpio/gpio-samsung.c index 46277877b7ec..19d6fc0229c3 100644 --- a/drivers/gpio/gpio-samsung.c +++ b/drivers/gpio/gpio-samsung.c | |||
| @@ -2382,8 +2382,8 @@ static struct samsung_gpio_chip exynos4_gpios_3[] = { | |||
| 2382 | #endif | 2382 | #endif |
| 2383 | }; | 2383 | }; |
| 2384 | 2384 | ||
| 2385 | static struct samsung_gpio_chip exynos5_gpios_1[] = { | ||
| 2386 | #ifdef CONFIG_ARCH_EXYNOS5 | 2385 | #ifdef CONFIG_ARCH_EXYNOS5 |
| 2386 | static struct samsung_gpio_chip exynos5_gpios_1[] = { | ||
| 2387 | { | 2387 | { |
| 2388 | .chip = { | 2388 | .chip = { |
| 2389 | .base = EXYNOS5_GPA0(0), | 2389 | .base = EXYNOS5_GPA0(0), |
| @@ -2541,11 +2541,11 @@ static struct samsung_gpio_chip exynos5_gpios_1[] = { | |||
| 2541 | .to_irq = samsung_gpiolib_to_irq, | 2541 | .to_irq = samsung_gpiolib_to_irq, |
| 2542 | }, | 2542 | }, |
| 2543 | }, | 2543 | }, |
| 2544 | #endif | ||
| 2545 | }; | 2544 | }; |
| 2545 | #endif | ||
| 2546 | 2546 | ||
| 2547 | static struct samsung_gpio_chip exynos5_gpios_2[] = { | ||
| 2548 | #ifdef CONFIG_ARCH_EXYNOS5 | 2547 | #ifdef CONFIG_ARCH_EXYNOS5 |
| 2548 | static struct samsung_gpio_chip exynos5_gpios_2[] = { | ||
| 2549 | { | 2549 | { |
| 2550 | .chip = { | 2550 | .chip = { |
| 2551 | .base = EXYNOS5_GPE0(0), | 2551 | .base = EXYNOS5_GPE0(0), |
| @@ -2602,11 +2602,11 @@ static struct samsung_gpio_chip exynos5_gpios_2[] = { | |||
| 2602 | 2602 | ||
| 2603 | }, | 2603 | }, |
| 2604 | }, | 2604 | }, |
| 2605 | #endif | ||
| 2606 | }; | 2605 | }; |
| 2606 | #endif | ||
| 2607 | 2607 | ||
| 2608 | static struct samsung_gpio_chip exynos5_gpios_3[] = { | ||
| 2609 | #ifdef CONFIG_ARCH_EXYNOS5 | 2608 | #ifdef CONFIG_ARCH_EXYNOS5 |
| 2609 | static struct samsung_gpio_chip exynos5_gpios_3[] = { | ||
| 2610 | { | 2610 | { |
| 2611 | .chip = { | 2611 | .chip = { |
| 2612 | .base = EXYNOS5_GPV0(0), | 2612 | .base = EXYNOS5_GPV0(0), |
| @@ -2638,11 +2638,11 @@ static struct samsung_gpio_chip exynos5_gpios_3[] = { | |||
| 2638 | .label = "GPV4", | 2638 | .label = "GPV4", |
| 2639 | }, | 2639 | }, |
| 2640 | }, | 2640 | }, |
| 2641 | #endif | ||
| 2642 | }; | 2641 | }; |
| 2642 | #endif | ||
| 2643 | 2643 | ||
| 2644 | static struct samsung_gpio_chip exynos5_gpios_4[] = { | ||
| 2645 | #ifdef CONFIG_ARCH_EXYNOS5 | 2644 | #ifdef CONFIG_ARCH_EXYNOS5 |
| 2645 | static struct samsung_gpio_chip exynos5_gpios_4[] = { | ||
| 2646 | { | 2646 | { |
| 2647 | .chip = { | 2647 | .chip = { |
| 2648 | .base = EXYNOS5_GPZ(0), | 2648 | .base = EXYNOS5_GPZ(0), |
| @@ -2650,8 +2650,8 @@ static struct samsung_gpio_chip exynos5_gpios_4[] = { | |||
| 2650 | .label = "GPZ", | 2650 | .label = "GPZ", |
| 2651 | }, | 2651 | }, |
| 2652 | }, | 2652 | }, |
| 2653 | #endif | ||
| 2654 | }; | 2653 | }; |
| 2654 | #endif | ||
| 2655 | 2655 | ||
| 2656 | 2656 | ||
| 2657 | #if defined(CONFIG_ARCH_EXYNOS) && defined(CONFIG_OF) | 2657 | #if defined(CONFIG_ARCH_EXYNOS) && defined(CONFIG_OF) |
diff --git a/drivers/gpio/gpio-sodaville.c b/drivers/gpio/gpio-sodaville.c index 9ba15d31d242..031e5d24837d 100644 --- a/drivers/gpio/gpio-sodaville.c +++ b/drivers/gpio/gpio-sodaville.c | |||
| @@ -41,7 +41,7 @@ | |||
| 41 | struct sdv_gpio_chip_data { | 41 | struct sdv_gpio_chip_data { |
| 42 | int irq_base; | 42 | int irq_base; |
| 43 | void __iomem *gpio_pub_base; | 43 | void __iomem *gpio_pub_base; |
| 44 | struct irq_domain id; | 44 | struct irq_domain *id; |
| 45 | struct irq_chip_generic *gc; | 45 | struct irq_chip_generic *gc; |
| 46 | struct bgpio_chip bgpio; | 46 | struct bgpio_chip bgpio; |
| 47 | }; | 47 | }; |
| @@ -51,10 +51,9 @@ static int sdv_gpio_pub_set_type(struct irq_data *d, unsigned int type) | |||
| 51 | struct irq_chip_generic *gc = irq_data_get_irq_chip_data(d); | 51 | struct irq_chip_generic *gc = irq_data_get_irq_chip_data(d); |
| 52 | struct sdv_gpio_chip_data *sd = gc->private; | 52 | struct sdv_gpio_chip_data *sd = gc->private; |
| 53 | void __iomem *type_reg; | 53 | void __iomem *type_reg; |
| 54 | u32 irq_offs = d->irq - sd->irq_base; | ||
| 55 | u32 reg; | 54 | u32 reg; |
| 56 | 55 | ||
| 57 | if (irq_offs < 8) | 56 | if (d->hwirq < 8) |
| 58 | type_reg = sd->gpio_pub_base + GPIT1R0; | 57 | type_reg = sd->gpio_pub_base + GPIT1R0; |
| 59 | else | 58 | else |
| 60 | type_reg = sd->gpio_pub_base + GPIT1R1; | 59 | type_reg = sd->gpio_pub_base + GPIT1R1; |
| @@ -63,11 +62,11 @@ static int sdv_gpio_pub_set_type(struct irq_data *d, unsigned int type) | |||
| 63 | 62 | ||
| 64 | switch (type) { | 63 | switch (type) { |
| 65 | case IRQ_TYPE_LEVEL_HIGH: | 64 | case IRQ_TYPE_LEVEL_HIGH: |
| 66 | reg &= ~BIT(4 * (irq_offs % 8)); | 65 | reg &= ~BIT(4 * (d->hwirq % 8)); |
| 67 | break; | 66 | break; |
| 68 | 67 | ||
| 69 | case IRQ_TYPE_LEVEL_LOW: | 68 | case IRQ_TYPE_LEVEL_LOW: |
| 70 | reg |= BIT(4 * (irq_offs % 8)); | 69 | reg |= BIT(4 * (d->hwirq % 8)); |
| 71 | break; | 70 | break; |
| 72 | 71 | ||
| 73 | default: | 72 | default: |
| @@ -91,7 +90,7 @@ static irqreturn_t sdv_gpio_pub_irq_handler(int irq, void *data) | |||
| 91 | u32 irq_bit = __fls(irq_stat); | 90 | u32 irq_bit = __fls(irq_stat); |
| 92 | 91 | ||
| 93 | irq_stat &= ~BIT(irq_bit); | 92 | irq_stat &= ~BIT(irq_bit); |
| 94 | generic_handle_irq(sd->irq_base + irq_bit); | 93 | generic_handle_irq(irq_find_mapping(sd->id, irq_bit)); |
| 95 | } | 94 | } |
| 96 | 95 | ||
| 97 | return IRQ_HANDLED; | 96 | return IRQ_HANDLED; |
| @@ -127,7 +126,7 @@ static int sdv_xlate(struct irq_domain *h, struct device_node *node, | |||
| 127 | } | 126 | } |
| 128 | 127 | ||
| 129 | static struct irq_domain_ops irq_domain_sdv_ops = { | 128 | static struct irq_domain_ops irq_domain_sdv_ops = { |
| 130 | .dt_translate = sdv_xlate, | 129 | .xlate = sdv_xlate, |
| 131 | }; | 130 | }; |
| 132 | 131 | ||
| 133 | static __devinit int sdv_register_irqsupport(struct sdv_gpio_chip_data *sd, | 132 | static __devinit int sdv_register_irqsupport(struct sdv_gpio_chip_data *sd, |
| @@ -149,10 +148,6 @@ static __devinit int sdv_register_irqsupport(struct sdv_gpio_chip_data *sd, | |||
| 149 | if (ret) | 148 | if (ret) |
| 150 | goto out_free_desc; | 149 | goto out_free_desc; |
| 151 | 150 | ||
| 152 | sd->id.irq_base = sd->irq_base; | ||
| 153 | sd->id.of_node = of_node_get(pdev->dev.of_node); | ||
| 154 | sd->id.ops = &irq_domain_sdv_ops; | ||
| 155 | |||
| 156 | /* | 151 | /* |
| 157 | * This gpio irq controller latches level irqs. Testing shows that if | 152 | * This gpio irq controller latches level irqs. Testing shows that if |
| 158 | * we unmask & ACK the IRQ before the source of the interrupt is gone | 153 | * we unmask & ACK the IRQ before the source of the interrupt is gone |
| @@ -179,7 +174,10 @@ static __devinit int sdv_register_irqsupport(struct sdv_gpio_chip_data *sd, | |||
| 179 | IRQ_GC_INIT_MASK_CACHE, IRQ_NOREQUEST, | 174 | IRQ_GC_INIT_MASK_CACHE, IRQ_NOREQUEST, |
| 180 | IRQ_LEVEL | IRQ_NOPROBE); | 175 | IRQ_LEVEL | IRQ_NOPROBE); |
| 181 | 176 | ||
| 182 | irq_domain_add(&sd->id); | 177 | sd->id = irq_domain_add_legacy(pdev->dev.of_node, SDV_NUM_PUB_GPIOS, |
| 178 | sd->irq_base, 0, &irq_domain_sdv_ops, sd); | ||
| 179 | if (!sd->id) | ||
| 180 | goto out_free_irq; | ||
| 183 | return 0; | 181 | return 0; |
| 184 | out_free_irq: | 182 | out_free_irq: |
| 185 | free_irq(pdev->irq, sd); | 183 | free_irq(pdev->irq, sd); |
| @@ -260,7 +258,6 @@ static void sdv_gpio_remove(struct pci_dev *pdev) | |||
| 260 | { | 258 | { |
| 261 | struct sdv_gpio_chip_data *sd = pci_get_drvdata(pdev); | 259 | struct sdv_gpio_chip_data *sd = pci_get_drvdata(pdev); |
| 262 | 260 | ||
| 263 | irq_domain_del(&sd->id); | ||
| 264 | free_irq(pdev->irq, sd); | 261 | free_irq(pdev->irq, sd); |
| 265 | irq_free_descs(sd->irq_base, SDV_NUM_PUB_GPIOS); | 262 | irq_free_descs(sd->irq_base, SDV_NUM_PUB_GPIOS); |
| 266 | 263 | ||
diff --git a/drivers/hwmon/acpi_power_meter.c b/drivers/hwmon/acpi_power_meter.c index 145f13580ff0..9140236a0182 100644 --- a/drivers/hwmon/acpi_power_meter.c +++ b/drivers/hwmon/acpi_power_meter.c | |||
| @@ -391,6 +391,7 @@ static ssize_t show_str(struct device *dev, | |||
| 391 | break; | 391 | break; |
| 392 | default: | 392 | default: |
| 393 | BUG(); | 393 | BUG(); |
| 394 | val = ""; | ||
| 394 | } | 395 | } |
| 395 | 396 | ||
| 396 | return sprintf(buf, "%s\n", val); | 397 | return sprintf(buf, "%s\n", val); |
diff --git a/drivers/hwmon/pmbus/pmbus_core.c b/drivers/hwmon/pmbus/pmbus_core.c index be51037363c8..29b319db573e 100644 --- a/drivers/hwmon/pmbus/pmbus_core.c +++ b/drivers/hwmon/pmbus/pmbus_core.c | |||
| @@ -710,13 +710,13 @@ static u16 pmbus_data2reg(struct pmbus_data *data, | |||
| 710 | * If a negative value is stored in any of the referenced registers, this value | 710 | * If a negative value is stored in any of the referenced registers, this value |
| 711 | * reflects an error code which will be returned. | 711 | * reflects an error code which will be returned. |
| 712 | */ | 712 | */ |
| 713 | static int pmbus_get_boolean(struct pmbus_data *data, int index, int *val) | 713 | static int pmbus_get_boolean(struct pmbus_data *data, int index) |
| 714 | { | 714 | { |
| 715 | u8 s1 = (index >> 24) & 0xff; | 715 | u8 s1 = (index >> 24) & 0xff; |
| 716 | u8 s2 = (index >> 16) & 0xff; | 716 | u8 s2 = (index >> 16) & 0xff; |
| 717 | u8 reg = (index >> 8) & 0xff; | 717 | u8 reg = (index >> 8) & 0xff; |
| 718 | u8 mask = index & 0xff; | 718 | u8 mask = index & 0xff; |
| 719 | int status; | 719 | int ret, status; |
| 720 | u8 regval; | 720 | u8 regval; |
| 721 | 721 | ||
| 722 | status = data->status[reg]; | 722 | status = data->status[reg]; |
| @@ -725,7 +725,7 @@ static int pmbus_get_boolean(struct pmbus_data *data, int index, int *val) | |||
| 725 | 725 | ||
| 726 | regval = status & mask; | 726 | regval = status & mask; |
| 727 | if (!s1 && !s2) | 727 | if (!s1 && !s2) |
| 728 | *val = !!regval; | 728 | ret = !!regval; |
| 729 | else { | 729 | else { |
| 730 | long v1, v2; | 730 | long v1, v2; |
| 731 | struct pmbus_sensor *sensor1, *sensor2; | 731 | struct pmbus_sensor *sensor1, *sensor2; |
| @@ -739,9 +739,9 @@ static int pmbus_get_boolean(struct pmbus_data *data, int index, int *val) | |||
| 739 | 739 | ||
| 740 | v1 = pmbus_reg2data(data, sensor1); | 740 | v1 = pmbus_reg2data(data, sensor1); |
| 741 | v2 = pmbus_reg2data(data, sensor2); | 741 | v2 = pmbus_reg2data(data, sensor2); |
| 742 | *val = !!(regval && v1 >= v2); | 742 | ret = !!(regval && v1 >= v2); |
| 743 | } | 743 | } |
| 744 | return 0; | 744 | return ret; |
| 745 | } | 745 | } |
| 746 | 746 | ||
| 747 | static ssize_t pmbus_show_boolean(struct device *dev, | 747 | static ssize_t pmbus_show_boolean(struct device *dev, |
| @@ -750,11 +750,10 @@ static ssize_t pmbus_show_boolean(struct device *dev, | |||
| 750 | struct sensor_device_attribute *attr = to_sensor_dev_attr(da); | 750 | struct sensor_device_attribute *attr = to_sensor_dev_attr(da); |
| 751 | struct pmbus_data *data = pmbus_update_device(dev); | 751 | struct pmbus_data *data = pmbus_update_device(dev); |
| 752 | int val; | 752 | int val; |
| 753 | int err; | ||
| 754 | 753 | ||
| 755 | err = pmbus_get_boolean(data, attr->index, &val); | 754 | val = pmbus_get_boolean(data, attr->index); |
| 756 | if (err) | 755 | if (val < 0) |
| 757 | return err; | 756 | return val; |
| 758 | return snprintf(buf, PAGE_SIZE, "%d\n", val); | 757 | return snprintf(buf, PAGE_SIZE, "%d\n", val); |
| 759 | } | 758 | } |
| 760 | 759 | ||
diff --git a/drivers/hwmon/smsc47b397.c b/drivers/hwmon/smsc47b397.c index d3b778da3f86..c5f6be478bad 100644 --- a/drivers/hwmon/smsc47b397.c +++ b/drivers/hwmon/smsc47b397.c | |||
| @@ -343,10 +343,11 @@ exit: | |||
| 343 | return err; | 343 | return err; |
| 344 | } | 344 | } |
| 345 | 345 | ||
| 346 | static int __init smsc47b397_find(unsigned short *addr) | 346 | static int __init smsc47b397_find(void) |
| 347 | { | 347 | { |
| 348 | u8 id, rev; | 348 | u8 id, rev; |
| 349 | char *name; | 349 | char *name; |
| 350 | unsigned short addr; | ||
| 350 | 351 | ||
| 351 | superio_enter(); | 352 | superio_enter(); |
| 352 | id = force_id ? force_id : superio_inb(SUPERIO_REG_DEVID); | 353 | id = force_id ? force_id : superio_inb(SUPERIO_REG_DEVID); |
| @@ -370,14 +371,14 @@ static int __init smsc47b397_find(unsigned short *addr) | |||
| 370 | rev = superio_inb(SUPERIO_REG_DEVREV); | 371 | rev = superio_inb(SUPERIO_REG_DEVREV); |
| 371 | 372 | ||
| 372 | superio_select(SUPERIO_REG_LD8); | 373 | superio_select(SUPERIO_REG_LD8); |
| 373 | *addr = (superio_inb(SUPERIO_REG_BASE_MSB) << 8) | 374 | addr = (superio_inb(SUPERIO_REG_BASE_MSB) << 8) |
| 374 | | superio_inb(SUPERIO_REG_BASE_LSB); | 375 | | superio_inb(SUPERIO_REG_BASE_LSB); |
| 375 | 376 | ||
| 376 | pr_info("found SMSC %s (base address 0x%04x, revision %u)\n", | 377 | pr_info("found SMSC %s (base address 0x%04x, revision %u)\n", |
| 377 | name, *addr, rev); | 378 | name, addr, rev); |
| 378 | 379 | ||
| 379 | superio_exit(); | 380 | superio_exit(); |
| 380 | return 0; | 381 | return addr; |
| 381 | } | 382 | } |
| 382 | 383 | ||
| 383 | static int __init smsc47b397_init(void) | 384 | static int __init smsc47b397_init(void) |
| @@ -385,9 +386,10 @@ static int __init smsc47b397_init(void) | |||
| 385 | unsigned short address; | 386 | unsigned short address; |
| 386 | int ret; | 387 | int ret; |
| 387 | 388 | ||
| 388 | ret = smsc47b397_find(&address); | 389 | ret = smsc47b397_find(); |
| 389 | if (ret) | 390 | if (ret < 0) |
| 390 | return ret; | 391 | return ret; |
| 392 | address = ret; | ||
| 391 | 393 | ||
| 392 | ret = platform_driver_register(&smsc47b397_driver); | 394 | ret = platform_driver_register(&smsc47b397_driver); |
| 393 | if (ret) | 395 | if (ret) |
diff --git a/drivers/hwmon/smsc47m1.c b/drivers/hwmon/smsc47m1.c index c590c1469793..b5aa38dd7ab9 100644 --- a/drivers/hwmon/smsc47m1.c +++ b/drivers/hwmon/smsc47m1.c | |||
| @@ -491,10 +491,10 @@ static const struct attribute_group smsc47m1_group = { | |||
| 491 | .attrs = smsc47m1_attributes, | 491 | .attrs = smsc47m1_attributes, |
| 492 | }; | 492 | }; |
| 493 | 493 | ||
| 494 | static int __init smsc47m1_find(unsigned short *addr, | 494 | static int __init smsc47m1_find(struct smsc47m1_sio_data *sio_data) |
| 495 | struct smsc47m1_sio_data *sio_data) | ||
| 496 | { | 495 | { |
| 497 | u8 val; | 496 | u8 val; |
| 497 | unsigned short addr; | ||
| 498 | 498 | ||
| 499 | superio_enter(); | 499 | superio_enter(); |
| 500 | val = force_id ? force_id : superio_inb(SUPERIO_REG_DEVID); | 500 | val = force_id ? force_id : superio_inb(SUPERIO_REG_DEVID); |
| @@ -546,9 +546,9 @@ static int __init smsc47m1_find(unsigned short *addr, | |||
| 546 | } | 546 | } |
| 547 | 547 | ||
| 548 | superio_select(); | 548 | superio_select(); |
| 549 | *addr = (superio_inb(SUPERIO_REG_BASE) << 8) | 549 | addr = (superio_inb(SUPERIO_REG_BASE) << 8) |
| 550 | | superio_inb(SUPERIO_REG_BASE + 1); | 550 | | superio_inb(SUPERIO_REG_BASE + 1); |
| 551 | if (*addr == 0) { | 551 | if (addr == 0) { |
| 552 | pr_info("Device address not set, will not use\n"); | 552 | pr_info("Device address not set, will not use\n"); |
| 553 | superio_exit(); | 553 | superio_exit(); |
| 554 | return -ENODEV; | 554 | return -ENODEV; |
| @@ -565,7 +565,7 @@ static int __init smsc47m1_find(unsigned short *addr, | |||
| 565 | } | 565 | } |
| 566 | 566 | ||
| 567 | superio_exit(); | 567 | superio_exit(); |
| 568 | return 0; | 568 | return addr; |
| 569 | } | 569 | } |
| 570 | 570 | ||
| 571 | /* Restore device to its initial state */ | 571 | /* Restore device to its initial state */ |
| @@ -938,13 +938,15 @@ static int __init sm_smsc47m1_init(void) | |||
| 938 | unsigned short address; | 938 | unsigned short address; |
| 939 | struct smsc47m1_sio_data sio_data; | 939 | struct smsc47m1_sio_data sio_data; |
| 940 | 940 | ||
| 941 | if (smsc47m1_find(&address, &sio_data)) | 941 | err = smsc47m1_find(&sio_data); |
| 942 | return -ENODEV; | 942 | if (err < 0) |
| 943 | return err; | ||
| 944 | address = err; | ||
| 943 | 945 | ||
| 944 | /* Sets global pdev as a side effect */ | 946 | /* Sets global pdev as a side effect */ |
| 945 | err = smsc47m1_device_add(address, &sio_data); | 947 | err = smsc47m1_device_add(address, &sio_data); |
| 946 | if (err) | 948 | if (err) |
| 947 | goto exit; | 949 | return err; |
| 948 | 950 | ||
| 949 | err = platform_driver_probe(&smsc47m1_driver, smsc47m1_probe); | 951 | err = platform_driver_probe(&smsc47m1_driver, smsc47m1_probe); |
| 950 | if (err) | 952 | if (err) |
| @@ -955,7 +957,6 @@ static int __init sm_smsc47m1_init(void) | |||
| 955 | exit_device: | 957 | exit_device: |
| 956 | platform_device_unregister(pdev); | 958 | platform_device_unregister(pdev); |
| 957 | smsc47m1_restore(&sio_data); | 959 | smsc47m1_restore(&sio_data); |
| 958 | exit: | ||
| 959 | return err; | 960 | return err; |
| 960 | } | 961 | } |
| 961 | 962 | ||
diff --git a/drivers/of/gpio.c b/drivers/of/gpio.c index bba81216b4db..bf984b6dc477 100644 --- a/drivers/of/gpio.c +++ b/drivers/of/gpio.c | |||
| @@ -140,7 +140,7 @@ int of_gpio_simple_xlate(struct gpio_chip *gc, | |||
| 140 | if (WARN_ON(gpiospec->args_count < gc->of_gpio_n_cells)) | 140 | if (WARN_ON(gpiospec->args_count < gc->of_gpio_n_cells)) |
| 141 | return -EINVAL; | 141 | return -EINVAL; |
| 142 | 142 | ||
| 143 | if (gpiospec->args[0] > gc->ngpio) | 143 | if (gpiospec->args[0] >= gc->ngpio) |
| 144 | return -EINVAL; | 144 | return -EINVAL; |
| 145 | 145 | ||
| 146 | if (flags) | 146 | if (flags) |
diff --git a/drivers/spi/spi-davinci.c b/drivers/spi/spi-davinci.c index 31bfba805cf4..9b2901feaf78 100644 --- a/drivers/spi/spi-davinci.c +++ b/drivers/spi/spi-davinci.c | |||
| @@ -653,7 +653,7 @@ static int davinci_spi_bufs(struct spi_device *spi, struct spi_transfer *t) | |||
| 653 | dev_dbg(sdev, "Couldn't DMA map a %d bytes RX buffer\n", | 653 | dev_dbg(sdev, "Couldn't DMA map a %d bytes RX buffer\n", |
| 654 | rx_buf_count); | 654 | rx_buf_count); |
| 655 | if (t->tx_buf) | 655 | if (t->tx_buf) |
| 656 | dma_unmap_single(NULL, t->tx_dma, t->len, | 656 | dma_unmap_single(&spi->dev, t->tx_dma, t->len, |
| 657 | DMA_TO_DEVICE); | 657 | DMA_TO_DEVICE); |
| 658 | return -ENOMEM; | 658 | return -ENOMEM; |
| 659 | } | 659 | } |
| @@ -692,10 +692,10 @@ static int davinci_spi_bufs(struct spi_device *spi, struct spi_transfer *t) | |||
| 692 | if (spicfg->io_type == SPI_IO_TYPE_DMA) { | 692 | if (spicfg->io_type == SPI_IO_TYPE_DMA) { |
| 693 | 693 | ||
| 694 | if (t->tx_buf) | 694 | if (t->tx_buf) |
| 695 | dma_unmap_single(NULL, t->tx_dma, t->len, | 695 | dma_unmap_single(&spi->dev, t->tx_dma, t->len, |
| 696 | DMA_TO_DEVICE); | 696 | DMA_TO_DEVICE); |
| 697 | 697 | ||
| 698 | dma_unmap_single(NULL, t->rx_dma, rx_buf_count, | 698 | dma_unmap_single(&spi->dev, t->rx_dma, rx_buf_count, |
| 699 | DMA_FROM_DEVICE); | 699 | DMA_FROM_DEVICE); |
| 700 | 700 | ||
| 701 | clear_io_bits(dspi->base + SPIINT, SPIINT_DMA_REQ_EN); | 701 | clear_io_bits(dspi->base + SPIINT, SPIINT_DMA_REQ_EN); |
diff --git a/drivers/spi/spi-fsl-spi.c b/drivers/spi/spi-fsl-spi.c index 24cacff57786..5f748c0d96bd 100644 --- a/drivers/spi/spi-fsl-spi.c +++ b/drivers/spi/spi-fsl-spi.c | |||
| @@ -139,10 +139,12 @@ static void fsl_spi_change_mode(struct spi_device *spi) | |||
| 139 | static void fsl_spi_chipselect(struct spi_device *spi, int value) | 139 | static void fsl_spi_chipselect(struct spi_device *spi, int value) |
| 140 | { | 140 | { |
| 141 | struct mpc8xxx_spi *mpc8xxx_spi = spi_master_get_devdata(spi->master); | 141 | struct mpc8xxx_spi *mpc8xxx_spi = spi_master_get_devdata(spi->master); |
| 142 | struct fsl_spi_platform_data *pdata = spi->dev.parent->platform_data; | 142 | struct fsl_spi_platform_data *pdata; |
| 143 | bool pol = spi->mode & SPI_CS_HIGH; | 143 | bool pol = spi->mode & SPI_CS_HIGH; |
| 144 | struct spi_mpc8xxx_cs *cs = spi->controller_state; | 144 | struct spi_mpc8xxx_cs *cs = spi->controller_state; |
| 145 | 145 | ||
| 146 | pdata = spi->dev.parent->parent->platform_data; | ||
| 147 | |||
| 146 | if (value == BITBANG_CS_INACTIVE) { | 148 | if (value == BITBANG_CS_INACTIVE) { |
| 147 | if (pdata->cs_control) | 149 | if (pdata->cs_control) |
| 148 | pdata->cs_control(spi, !pol); | 150 | pdata->cs_control(spi, !pol); |
diff --git a/drivers/spi/spi-imx.c b/drivers/spi/spi-imx.c index 31054e3de4c1..570f22053be8 100644 --- a/drivers/spi/spi-imx.c +++ b/drivers/spi/spi-imx.c | |||
| @@ -83,7 +83,7 @@ struct spi_imx_data { | |||
| 83 | struct spi_bitbang bitbang; | 83 | struct spi_bitbang bitbang; |
| 84 | 84 | ||
| 85 | struct completion xfer_done; | 85 | struct completion xfer_done; |
| 86 | void *base; | 86 | void __iomem *base; |
| 87 | int irq; | 87 | int irq; |
| 88 | struct clk *clk; | 88 | struct clk *clk; |
| 89 | unsigned long spi_clk; | 89 | unsigned long spi_clk; |
| @@ -766,8 +766,12 @@ static int __devinit spi_imx_probe(struct platform_device *pdev) | |||
| 766 | } | 766 | } |
| 767 | 767 | ||
| 768 | ret = of_property_read_u32(np, "fsl,spi-num-chipselects", &num_cs); | 768 | ret = of_property_read_u32(np, "fsl,spi-num-chipselects", &num_cs); |
| 769 | if (ret < 0) | 769 | if (ret < 0) { |
| 770 | num_cs = mxc_platform_info->num_chipselect; | 770 | if (mxc_platform_info) |
| 771 | num_cs = mxc_platform_info->num_chipselect; | ||
| 772 | else | ||
| 773 | return ret; | ||
| 774 | } | ||
| 771 | 775 | ||
| 772 | master = spi_alloc_master(&pdev->dev, | 776 | master = spi_alloc_master(&pdev->dev, |
| 773 | sizeof(struct spi_imx_data) + sizeof(int) * num_cs); | 777 | sizeof(struct spi_imx_data) + sizeof(int) * num_cs); |
| @@ -784,7 +788,7 @@ static int __devinit spi_imx_probe(struct platform_device *pdev) | |||
| 784 | 788 | ||
| 785 | for (i = 0; i < master->num_chipselect; i++) { | 789 | for (i = 0; i < master->num_chipselect; i++) { |
| 786 | int cs_gpio = of_get_named_gpio(np, "cs-gpios", i); | 790 | int cs_gpio = of_get_named_gpio(np, "cs-gpios", i); |
| 787 | if (cs_gpio < 0) | 791 | if (cs_gpio < 0 && mxc_platform_info) |
| 788 | cs_gpio = mxc_platform_info->chipselect[i]; | 792 | cs_gpio = mxc_platform_info->chipselect[i]; |
| 789 | 793 | ||
| 790 | spi_imx->chipselect[i] = cs_gpio; | 794 | spi_imx->chipselect[i] = cs_gpio; |
diff --git a/include/linux/amba/pl022.h b/include/linux/amba/pl022.h index b8c51124ed19..76dd1b199a1b 100644 --- a/include/linux/amba/pl022.h +++ b/include/linux/amba/pl022.h | |||
| @@ -25,6 +25,8 @@ | |||
| 25 | #ifndef _SSP_PL022_H | 25 | #ifndef _SSP_PL022_H |
| 26 | #define _SSP_PL022_H | 26 | #define _SSP_PL022_H |
| 27 | 27 | ||
| 28 | #include <linux/types.h> | ||
| 29 | |||
| 28 | /** | 30 | /** |
| 29 | * whether SSP is in loopback mode or not | 31 | * whether SSP is in loopback mode or not |
| 30 | */ | 32 | */ |
