Commit 6ce076f4 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'arm-soc-5.9' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc

Pull ARM SoC updates from Arnd Bergmann:
 "These are mostly cosmetic changes and minor bugfixes for the SoC
  specific code, across the 32-bit at91, mvebu, davinci, samsung, and
  omap platforms.

  The main notable changes are for the Samsung Exynos platform, which
  sees a rewrite of gpio handling and a change to restore and adds a
  workaround for a problem with cpuidle support"

* tag 'arm-soc-5.9' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc:
  ARM: socfpga: PM: add missing put_device() call in socfpga_setup_ocram_self_refresh()
  MAINTAINERS: arm/amlogic: add designated reviewers
  ARM: davinci: dm646x-evm: Simplify error handling in 'evm_sw_setup()'
  ARM: davinci: Fix trivial spelling
  ARM: davinci: Replace HTTP links with HTTPS ones
  ARM: s3c24xx: Replace HTTP links with HTTPS ones
  ARM: orion/gpio: Make use of for_each_requested_gpio()
  ARM: at91: Replace HTTP links with HTTPS ones
  ARM: at91: pm: add missing put_device() call in at91_pm_sram_init()
  ARM: rpc: Change blacklist to quirklist in ecode.c file
  ARM: OMAP: Replace HTTP links with HTTPS ones
  ARM: s3c24xx: leds: Convert to use GPIO descriptors
  udc: lpc32xx: mark local function static
  ARM: exynos: MCPM: Restore big.LITTLE cpuidle support
  ARM: exynos: clear L310_AUX_CTRL_FULL_LINE_ZERO in default l2c_aux_val
parents 2f3fbfda a04e84c5
...@@ -1606,6 +1606,9 @@ F: sound/soc/meson/ ...@@ -1606,6 +1606,9 @@ F: sound/soc/meson/
ARM/Amlogic Meson SoC support ARM/Amlogic Meson SoC support
M: Kevin Hilman <khilman@baylibre.com> M: Kevin Hilman <khilman@baylibre.com>
R: Neil Armstrong <narmstrong@baylibre.com>
R: Jerome Brunet <jbrunet@baylibre.com>
R: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)
L: linux-amlogic@lists.infradead.org L: linux-amlogic@lists.infradead.org
S: Maintained S: Maintained
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
/* /*
* Device Tree for DA850 EVM board * Device Tree for DA850 EVM board
* *
* Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/ * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
*/ */
/dts-v1/; /dts-v1/;
#include "da850.dtsi" #include "da850.dtsi"
......
# SPDX-License-Identifier: GPL-2.0-only # SPDX-License-Identifier: GPL-2.0-only
# Empty file waiting for deletion once Makefile.boot isn't needed any more. # Empty file waiting for deletion once Makefile.boot isn't needed any more.
# Patch waits for application at # Patch waits for application at
# http://www.arm.linux.org.uk/developer/patches/viewpatch.php?id=7889/1 . # https://www.arm.linux.org.uk/developer/patches/viewpatch.php?id=7889/1 .
...@@ -592,13 +592,13 @@ static void __init at91_pm_sram_init(void) ...@@ -592,13 +592,13 @@ static void __init at91_pm_sram_init(void)
sram_pool = gen_pool_get(&pdev->dev, NULL); sram_pool = gen_pool_get(&pdev->dev, NULL);
if (!sram_pool) { if (!sram_pool) {
pr_warn("%s: sram pool unavailable!\n", __func__); pr_warn("%s: sram pool unavailable!\n", __func__);
return; goto out_put_device;
} }
sram_base = gen_pool_alloc(sram_pool, at91_pm_suspend_in_sram_sz); sram_base = gen_pool_alloc(sram_pool, at91_pm_suspend_in_sram_sz);
if (!sram_base) { if (!sram_base) {
pr_warn("%s: unable to alloc sram!\n", __func__); pr_warn("%s: unable to alloc sram!\n", __func__);
return; goto out_put_device;
} }
sram_pbase = gen_pool_virt_to_phys(sram_pool, sram_base); sram_pbase = gen_pool_virt_to_phys(sram_pool, sram_base);
...@@ -606,12 +606,17 @@ static void __init at91_pm_sram_init(void) ...@@ -606,12 +606,17 @@ static void __init at91_pm_sram_init(void)
at91_pm_suspend_in_sram_sz, false); at91_pm_suspend_in_sram_sz, false);
if (!at91_suspend_sram_fn) { if (!at91_suspend_sram_fn) {
pr_warn("SRAM: Could not map\n"); pr_warn("SRAM: Could not map\n");
return; goto out_put_device;
} }
/* Copy the pm suspend handler to SRAM */ /* Copy the pm suspend handler to SRAM */
at91_suspend_sram_fn = fncpy(at91_suspend_sram_fn, at91_suspend_sram_fn = fncpy(at91_suspend_sram_fn,
&at91_pm_suspend_in_sram, at91_pm_suspend_in_sram_sz); &at91_pm_suspend_in_sram, at91_pm_suspend_in_sram_sz);
return;
out_put_device:
put_device(&pdev->dev);
return;
} }
static bool __init at91_is_pm_mode_active(int pm_mode) static bool __init at91_is_pm_mode_active(int pm_mode)
......
...@@ -201,15 +201,13 @@ config MACH_MITYOMAPL138 ...@@ -201,15 +201,13 @@ config MACH_MITYOMAPL138
help help
Say Y here to select the Critical Link MityDSP-L138/MityARM-1808 Say Y here to select the Critical Link MityDSP-L138/MityARM-1808
System on Module. Information on this SoM may be found at System on Module. Information on this SoM may be found at
http://www.mitydsp.com https://www.mitydsp.com
config MACH_OMAPL138_HAWKBOARD config MACH_OMAPL138_HAWKBOARD
bool "TI AM1808 / OMAPL-138 Hawkboard platform" bool "TI AM1808 / OMAPL-138 Hawkboard platform"
depends on ARCH_DAVINCI_DA850 depends on ARCH_DAVINCI_DA850
help help
Say Y here to select the TI AM1808 / OMAPL-138 Hawkboard platform . Say Y here to select the TI AM1808 / OMAPL-138 Hawkboard platform .
Information of this board may be found at
http://www.hawkboard.org/
config DAVINCI_MUX config DAVINCI_MUX
bool "DAVINCI multiplexing support" bool "DAVINCI multiplexing support"
......
...@@ -266,7 +266,7 @@ static struct mtd_partition da830_evm_nand_partitions[] = { ...@@ -266,7 +266,7 @@ static struct mtd_partition da830_evm_nand_partitions[] = {
} }
}; };
/* flash bbt decriptors */ /* flash bbt descriptors */
static uint8_t da830_evm_nand_bbt_pattern[] = { 'B', 'b', 't', '0' }; static uint8_t da830_evm_nand_bbt_pattern[] = { 'B', 'b', 't', '0' };
static uint8_t da830_evm_nand_mirror_pattern[] = { '1', 't', 'b', 'B' }; static uint8_t da830_evm_nand_mirror_pattern[] = { '1', 't', 'b', 'B' };
......
/* /*
* TI DA850/OMAP-L138 EVM board * TI DA850/OMAP-L138 EVM board
* *
* Copyright (C) 2009 Texas Instruments Incorporated - http://www.ti.com/ * Copyright (C) 2009 Texas Instruments Incorporated - https://www.ti.com/
* *
* Derived from: arch/arm/mach-davinci/board-da830-evm.c * Derived from: arch/arm/mach-davinci/board-da830-evm.c
* Original Copyrights follow: * Original Copyrights follow:
......
...@@ -267,20 +267,15 @@ static int evm_sw_setup(struct i2c_client *client, int gpio, ...@@ -267,20 +267,15 @@ static int evm_sw_setup(struct i2c_client *client, int gpio,
evm_sw_gpio[i] = gpio++; evm_sw_gpio[i] = gpio++;
status = gpio_direction_input(evm_sw_gpio[i]); status = gpio_direction_input(evm_sw_gpio[i]);
if (status) { if (status)
gpio_free(evm_sw_gpio[i]);
evm_sw_gpio[i] = -EINVAL;
goto out_free; goto out_free;
}
status = gpio_export(evm_sw_gpio[i], 0); status = gpio_export(evm_sw_gpio[i], 0);
if (status) { if (status)
gpio_free(evm_sw_gpio[i]);
evm_sw_gpio[i] = -EINVAL;
goto out_free; goto out_free;
}
} }
return status; return 0;
out_free: out_free:
for (i = 0; i < 4; ++i) { for (i = 0; i < 4; ++i) {
if (evm_sw_gpio[i] != -EINVAL) { if (evm_sw_gpio[i] != -EINVAL) {
......
/* /*
* Critical Link MityOMAP-L138 SoM * Critical Link MityOMAP-L138 SoM
* *
* Copyright (C) 2010 Critical Link LLC - http://www.criticallink.com * Copyright (C) 2010 Critical Link LLC - https://www.criticallink.com
* *
* This file is licensed under the terms of the GNU General Public License * This file is licensed under the terms of the GNU General Public License
* version 2. This program is licensed "as is" without any warranty of * version 2. This program is licensed "as is" without any warranty of
......
...@@ -214,7 +214,7 @@ static __init void davinci_ntosd2_init(void) ...@@ -214,7 +214,7 @@ static __init void davinci_ntosd2_init(void)
* Mux the pins to be GPIOs, VLYNQEN is already done at startup. * Mux the pins to be GPIOs, VLYNQEN is already done at startup.
* The AEAWx are five new AEAW pins that can be muxed by separately. * The AEAWx are five new AEAW pins that can be muxed by separately.
* They are a bitmask for GPIO management. According TI * They are a bitmask for GPIO management. According TI
* documentation (http://www.ti.com/lit/gpn/tms320dm6446) to employ * documentation (https://www.ti.com/lit/gpn/tms320dm6446) to employ
* gpio(10,11,12,13) for leds any combination of bits works except * gpio(10,11,12,13) for leds any combination of bits works except
* four last. So we are to reset all five. * four last. So we are to reset all five.
*/ */
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* *
* Initial code: Syed Mohammed Khasim * Initial code: Syed Mohammed Khasim
* *
* Copyright (C) 2009 Texas Instruments Incorporated - http://www.ti.com * Copyright (C) 2009 Texas Instruments Incorporated - https://www.ti.com
* *
* This file is licensed under the terms of the GNU General Public License * This file is licensed under the terms of the GNU General Public License
* version 2. This program is licensed "as is" without any warranty of * version 2. This program is licensed "as is" without any warranty of
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
/* /*
* CPU idle for DaVinci SoCs * CPU idle for DaVinci SoCs
* *
* Copyright (C) 2009 Texas Instruments Incorporated. http://www.ti.com/ * Copyright (C) 2009 Texas Instruments Incorporated. https://www.ti.com/
* *
* Derived from Marvell Kirkwood CPU idle code * Derived from Marvell Kirkwood CPU idle code
* (arch/arm/mach-kirkwood/cpuidle.c) * (arch/arm/mach-kirkwood/cpuidle.c)
......
/* /*
* TI DaVinci cpuidle platform support * TI DaVinci cpuidle platform support
* *
* 2009 (C) Texas Instruments, Inc. http://www.ti.com/ * 2009 (C) Texas Instruments, Inc. https://www.ti.com/
* *
* This file is licensed under the terms of the GNU General Public License * This file is licensed under the terms of the GNU General Public License
* version 2. This program is licensed "as is" without any warranty of any * version 2. This program is licensed "as is" without any warranty of any
......
/* /*
* TI DA850/OMAP-L138 chip specific setup * TI DA850/OMAP-L138 chip specific setup
* *
* Copyright (C) 2009 Texas Instruments Incorporated - http://www.ti.com/ * Copyright (C) 2009 Texas Instruments Incorporated - https://www.ti.com/
* *
* Derived from: arch/arm/mach-davinci/da830.c * Derived from: arch/arm/mach-davinci/da830.c
* Original Copyrights follow: * Original Copyrights follow:
......
// SPDX-License-Identifier: GPL-2.0-only // SPDX-License-Identifier: GPL-2.0-only
/* /*
* Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/ * Copyright (C) 2012 Texas Instruments Incorporated - https://www.ti.com/
* *
* Modified from mach-omap/omap2/board-generic.c * Modified from mach-omap/omap2/board-generic.c
*/ */
......
/* /*
* TI DaVinci platform support for power management. * TI DaVinci platform support for power management.
* *
* Copyright (C) 2009 Texas Instruments, Inc. http://www.ti.com/ * Copyright (C) 2009 Texas Instruments, Inc. https://www.ti.com/
* *
* This program is free software; you can redistribute it and/or * This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as * modify it under the terms of the GNU General Public License as
......
...@@ -2,7 +2,7 @@ ...@@ -2,7 +2,7 @@
/* /*
* DaVinci Power Management Routines * DaVinci Power Management Routines
* *
* Copyright (C) 2009 Texas Instruments, Inc. http://www.ti.com/ * Copyright (C) 2009 Texas Instruments, Inc. https://www.ti.com/
*/ */
#include <linux/pm.h> #include <linux/pm.h>
......
/* SPDX-License-Identifier: GPL-2.0-only */ /* SPDX-License-Identifier: GPL-2.0-only */
/* /*
* (C) Copyright 2009, Texas Instruments, Inc. http://www.ti.com/ * (C) Copyright 2009, Texas Instruments, Inc. https://www.ti.com/
*/ */
/* replicated define because linux/bitops.h cannot be included in assembly */ /* replicated define because linux/bitops.h cannot be included in assembly */
......
...@@ -193,7 +193,7 @@ static void __init exynos_dt_fixup(void) ...@@ -193,7 +193,7 @@ static void __init exynos_dt_fixup(void)
} }
DT_MACHINE_START(EXYNOS_DT, "Samsung Exynos (Flattened Device Tree)") DT_MACHINE_START(EXYNOS_DT, "Samsung Exynos (Flattened Device Tree)")
.l2c_aux_val = 0x3c400001, .l2c_aux_val = 0x3c400000,
.l2c_aux_mask = 0xc20fffff, .l2c_aux_mask = 0xc20fffff,
.smp = smp_ops(exynos_smp_ops), .smp = smp_ops(exynos_smp_ops),
.map_io = exynos_init_io, .map_io = exynos_init_io,
......
...@@ -26,6 +26,7 @@ ...@@ -26,6 +26,7 @@
#define EXYNOS5420_USE_L2_COMMON_UP_STATE BIT(30) #define EXYNOS5420_USE_L2_COMMON_UP_STATE BIT(30)
static void __iomem *ns_sram_base_addr __ro_after_init; static void __iomem *ns_sram_base_addr __ro_after_init;
static bool secure_firmware __ro_after_init;
/* /*
* The common v7_exit_coherency_flush API could not be used because of the * The common v7_exit_coherency_flush API could not be used because of the
...@@ -58,15 +59,16 @@ static void __iomem *ns_sram_base_addr __ro_after_init; ...@@ -58,15 +59,16 @@ static void __iomem *ns_sram_base_addr __ro_after_init;
static int exynos_cpu_powerup(unsigned int cpu, unsigned int cluster) static int exynos_cpu_powerup(unsigned int cpu, unsigned int cluster)
{ {
unsigned int cpunr = cpu + (cluster * EXYNOS5420_CPUS_PER_CLUSTER); unsigned int cpunr = cpu + (cluster * EXYNOS5420_CPUS_PER_CLUSTER);
bool state;
pr_debug("%s: cpu %u cluster %u\n", __func__, cpu, cluster); pr_debug("%s: cpu %u cluster %u\n", __func__, cpu, cluster);
if (cpu >= EXYNOS5420_CPUS_PER_CLUSTER || if (cpu >= EXYNOS5420_CPUS_PER_CLUSTER ||
cluster >= EXYNOS5420_NR_CLUSTERS) cluster >= EXYNOS5420_NR_CLUSTERS)
return -EINVAL; return -EINVAL;
if (!exynos_cpu_power_state(cpunr)) { state = exynos_cpu_power_state(cpunr);
exynos_cpu_power_up(cpunr); exynos_cpu_power_up(cpunr);
if (!state && secure_firmware) {
/* /*
* This assumes the cluster number of the big cores(Cortex A15) * This assumes the cluster number of the big cores(Cortex A15)
* is 0 and the Little cores(Cortex A7) is 1. * is 0 and the Little cores(Cortex A7) is 1.
...@@ -258,6 +260,8 @@ static int __init exynos_mcpm_init(void) ...@@ -258,6 +260,8 @@ static int __init exynos_mcpm_init(void)
return -ENOMEM; return -ENOMEM;
} }
secure_firmware = exynos_secure_firmware_available();
/* /*
* To increase the stability of KFC reset we need to program * To increase the stability of KFC reset we need to program
* the PMU SPARE3 register * the PMU SPARE3 register
......
...@@ -146,7 +146,7 @@ config MACH_SX1 ...@@ -146,7 +146,7 @@ config MACH_SX1
Support for the Siemens SX1 phone. To boot the kernel, Support for the Siemens SX1 phone. To boot the kernel,
you'll need a SX1 compatible bootloader; check out you'll need a SX1 compatible bootloader; check out
http://forum.oslik.ru and http://forum.oslik.ru and
http://www.handhelds.org/moin/moin.cgi/SiemensSX1 https://www.handhelds.org/moin/moin.cgi/SiemensSX1
for more information. for more information.
Say Y here if you have such a phone, say NO otherwise. Say Y here if you have such a phone, say NO otherwise.
......
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
* OMAP2/3 support Copyright (C) 2004-2007 Texas Instruments, Inc. * OMAP2/3 support Copyright (C) 2004-2007 Texas Instruments, Inc.
* Some functions based on earlier dma-omap.c Copyright (C) 2001 RidgeRun, Inc. * Some functions based on earlier dma-omap.c Copyright (C) 2001 RidgeRun, Inc.
* *
* Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ * Copyright (C) 2010 Texas Instruments Incorporated - https://www.ti.com/
* Converted DMA library into platform driver * Converted DMA library into platform driver
* - G, Manjunath Kondaiah <manjugk@ti.com> * - G, Manjunath Kondaiah <manjugk@ti.com>
*/ */
......
/* /*
* OMAP15xx specific gpio init * OMAP15xx specific gpio init
* *
* Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ * Copyright (C) 2010 Texas Instruments Incorporated - https://www.ti.com/
* *
* Author: * Author:
* Charulatha V <charu@ti.com> * Charulatha V <charu@ti.com>
......
/* /*
* OMAP16xx specific gpio init * OMAP16xx specific gpio init
* *
* Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ * Copyright (C) 2010 Texas Instruments Incorporated - https://www.ti.com/
* *
* Author: * Author:
* Charulatha V <charu@ti.com> * Charulatha V <charu@ti.com>
......
/* /*
* OMAP7xx specific gpio init * OMAP7xx specific gpio init
* *
* Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ * Copyright (C) 2010 Texas Instruments Incorporated - https://www.ti.com/
* *
* Author: * Author:
* Charulatha V <charu@ti.com> * Charulatha V <charu@ti.com>
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
* device model. It also has a low level function to change the timer * device model. It also has a low level function to change the timer
* input clock source. * input clock source.
* *
* Copyright (C) 2011 Texas Instruments Incorporated - http://www.ti.com/ * Copyright (C) 2011 Texas Instruments Incorporated - https://www.ti.com/
* Tarun Kanti DebBarma <tarun.kanti@ti.com> * Tarun Kanti DebBarma <tarun.kanti@ti.com>
* Thara Gopinath <thara@ti.com> * Thara Gopinath <thara@ti.com>
* *
......
...@@ -63,7 +63,7 @@ struct ecard_request { ...@@ -63,7 +63,7 @@ struct ecard_request {
struct completion *complete; struct completion *complete;
}; };
struct expcard_blacklist { struct expcard_quirklist {
unsigned short manufacturer; unsigned short manufacturer;
unsigned short product; unsigned short product;
const char *type; const char *type;
...@@ -79,7 +79,7 @@ static void atomwide_3p_quirk(ecard_t *ec); ...@@ -79,7 +79,7 @@ static void atomwide_3p_quirk(ecard_t *ec);
/* List of descriptions of cards which don't have an extended /* List of descriptions of cards which don't have an extended
* identification, or chunk directories containing a description. * identification, or chunk directories containing a description.
*/ */
static struct expcard_blacklist __initdata blacklist[] = { static struct expcard_quirklist quirklist[] __initdata = {
{ MANU_ACORN, PROD_ACORN_ETHER1, "Acorn Ether1" }, { MANU_ACORN, PROD_ACORN_ETHER1, "Acorn Ether1" },
{ MANU_ATOMWIDE, PROD_ATOMWIDE_3PSERIAL, NULL, atomwide_3p_quirk }, { MANU_ATOMWIDE, PROD_ATOMWIDE_3PSERIAL, NULL, atomwide_3p_quirk },
}; };
...@@ -935,13 +935,13 @@ static int __init ecard_probe(int slot, unsigned irq, card_type_t type) ...@@ -935,13 +935,13 @@ static int __init ecard_probe(int slot, unsigned irq, card_type_t type)
ec->fiqmask = 4; ec->fiqmask = 4;
} }
for (i = 0; i < ARRAY_SIZE(blacklist); i++) for (i = 0; i < ARRAY_SIZE(quirklist); i++)
if (blacklist[i].manufacturer == ec->cid.manufacturer && if (quirklist[i].manufacturer == ec->cid.manufacturer &&
blacklist[i].product == ec->cid.product) { quirklist[i].product == ec->cid.product) {
if (blacklist[i].type) if (quirklist[i].type)
ec->card_desc = blacklist[i].type; ec->card_desc = quirklist[i].type;
if (blacklist[i].init) if (quirklist[i].init)
blacklist[i].init(ec); quirklist[i].init(ec);
break; break;
} }
......
...@@ -267,7 +267,7 @@ config MACH_TCT_HAMMER ...@@ -267,7 +267,7 @@ config MACH_TCT_HAMMER
select S3C_DEV_USB_HOST select S3C_DEV_USB_HOST
help help
Say Y here if you are using the TinCanTools Hammer Board Say Y here if you are using the TinCanTools Hammer Board
<http://www.tincantools.com> <https://www.tincantools.com>
config MACH_VR1000 config MACH_VR1000
bool "Thorcom VR1000" bool "Thorcom VR1000"
......
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include <linux/timer.h> #include <linux/timer.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/gpio.h> #include <linux/gpio.h>
#include <linux/gpio/machine.h>
#include <linux/device.h> #include <linux/device.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
...@@ -44,29 +45,53 @@ ...@@ -44,29 +45,53 @@
/* LED devices */ /* LED devices */
static struct gpiod_lookup_table smdk_led4_gpio_table = {
.dev_id = "s3c24xx_led.0",
.table = {
GPIO_LOOKUP("GPF", 4, NULL, GPIO_ACTIVE_LOW | GPIO_OPEN_DRAIN),
{ },
},
};
static struct gpiod_lookup_table smdk_led5_gpio_table = {
.dev_id = "s3c24xx_led.1",
.table = {
GPIO_LOOKUP("GPF", 5, NULL, GPIO_ACTIVE_LOW | GPIO_OPEN_DRAIN),
{ },
},
};
static struct gpiod_lookup_table smdk_led6_gpio_table = {
.dev_id = "s3c24xx_led.2",
.table = {
GPIO_LOOKUP("GPF", 6, NULL, GPIO_ACTIVE_LOW | GPIO_OPEN_DRAIN),
{ },
},
};
static struct gpiod_lookup_table smdk_led7_gpio_table = {
.dev_id = "s3c24xx_led.3",
.table = {
GPIO_LOOKUP("GPF", 7, NULL, GPIO_ACTIVE_LOW | GPIO_OPEN_DRAIN),
{ },
},
};
static struct s3c24xx_led_platdata smdk_pdata_led4 = { static struct s3c24xx_led_platdata smdk_pdata_led4 = {
.gpio = S3C2410_GPF(4),
.flags = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE,
.name = "led4", .name = "led4",
.def_trigger = "timer", .def_trigger = "timer",
}; };
static struct s3c24xx_led_platdata smdk_pdata_led5 = { static struct s3c24xx_led_platdata smdk_pdata_led5 = {
.gpio = S3C2410_GPF(5),
.flags = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE,
.name = "led5", .name = "led5",
.def_trigger = "nand-disk", .def_trigger = "nand-disk",
}; };
static struct s3c24xx_led_platdata smdk_pdata_led6 = { static struct s3c24xx_led_platdata smdk_pdata_led6 = {
.gpio = S3C2410_GPF(6),
.flags = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE,
.name = "led6", .name = "led6",
}; };
static struct s3c24xx_led_platdata smdk_pdata_led7 = { static struct s3c24xx_led_platdata smdk_pdata_led7 = {
.gpio = S3C2410_GPF(7),
.flags = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE,
.name = "led7", .name = "led7",
}; };
...@@ -179,27 +204,25 @@ static struct platform_device __initdata *smdk_devs[] = { ...@@ -179,27 +204,25 @@ static struct platform_device __initdata *smdk_devs[] = {
&smdk_led7, &smdk_led7,
}; };
static const struct gpio smdk_led_gpios[] = {
{ S3C2410_GPF(4), GPIOF_OUT_INIT_HIGH, NULL },
{ S3C2410_GPF(5), GPIOF_OUT_INIT_HIGH, NULL },
{ S3C2410_GPF(6), GPIOF_OUT_INIT_HIGH, NULL },
{ S3C2410_GPF(7), GPIOF_OUT_INIT_HIGH, NULL },
};
void __init smdk_machine_init(void) void __init smdk_machine_init(void)
{ {
/* Configure the LEDs (even if we have no LED support)*/
int ret = gpio_request_array(smdk_led_gpios,
ARRAY_SIZE(smdk_led_gpios));
if (!WARN_ON(ret < 0))
gpio_free_array(smdk_led_gpios, ARRAY_SIZE(smdk_led_gpios));
if (machine_is_smdk2443()) if (machine_is_smdk2443())
smdk_nand_info.twrph0 = 50; smdk_nand_info.twrph0 = 50;
s3c_nand_set_platdata(&smdk_nand_info); s3c_nand_set_platdata(&smdk_nand_info);
/* Disable pull-up on the LED lines */
s3c_gpio_setpull(S3C2410_GPF(4), S3C_GPIO_PULL_NONE);
s3c_gpio_setpull(S3C2410_GPF(5), S3C_GPIO_PULL_NONE);
s3c_gpio_setpull(S3C2410_GPF(6), S3C_GPIO_PULL_NONE);
s3c_gpio_setpull(S3C2410_GPF(7), S3C_GPIO_PULL_NONE);
/* Add lookups for the lines */
gpiod_add_lookup_table(&smdk_led4_gpio_table);
gpiod_add_lookup_table(&smdk_led5_gpio_table);
gpiod_add_lookup_table(&smdk_led6_gpio_table);
gpiod_add_lookup_table(&smdk_led7_gpio_table);
platform_add_devices(smdk_devs, ARRAY_SIZE(smdk_devs)); platform_add_devices(smdk_devs, ARRAY_SIZE(smdk_devs));
s3c_pm_init(); s3c_pm_init();
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
// Copyright (c) 2003-2005 Simtec Electronics // Copyright (c) 2003-2005 Simtec Electronics
// Ben Dooks <ben@simtec.co.uk> // Ben Dooks <ben@simtec.co.uk>
// //
// http://www.handhelds.org/projects/h1940.html // https://www.handhelds.org/projects/h1940.html
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/types.h> #include <linux/types.h>
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
// Weibing <http://weibing.blogbus.com> and // Weibing <http://weibing.blogbus.com> and
// Michel Pollet <buserror@gmail.com> // Michel Pollet <buserror@gmail.com>
// //
// For product information, visit http://code.google.com/p/mini2440/ // For product information, visit https://code.google.com/p/mini2440/
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/types.h> #include <linux/types.h>
...@@ -402,37 +402,68 @@ static struct platform_device mini2440_button_device = { ...@@ -402,37 +402,68 @@ static struct platform_device mini2440_button_device = {
/* LEDS */ /* LEDS */
static struct gpiod_lookup_table mini2440_led1_gpio_table = {
.dev_id = "s3c24xx_led.1",
.table = {
GPIO_LOOKUP("GPB", 5, NULL, GPIO_ACTIVE_LOW | GPIO_OPEN_DRAIN),
{ },
},
};
static struct gpiod_lookup_table mini2440_led2_gpio_table = {
.dev_id = "s3c24xx_led.2",
.table = {
GPIO_LOOKUP("GPB", 6, NULL, GPIO_ACTIVE_LOW | GPIO_OPEN_DRAIN),
{ },
},
};
static struct gpiod_lookup_table mini2440_led3_gpio_table = {
.dev_id = "s3c24xx_led.3",
.table = {
GPIO_LOOKUP("GPB", 7, NULL, GPIO_ACTIVE_LOW | GPIO_OPEN_DRAIN),
{ },
},
};
static struct gpiod_lookup_table mini2440_led4_gpio_table = {
.dev_id = "s3c24xx_led.4",
.table = {
GPIO_LOOKUP("GPB", 8, NULL, GPIO_ACTIVE_LOW | GPIO_OPEN_DRAIN),
{ },
},
};
static struct gpiod_lookup_table mini2440_backlight_gpio_table = {
.dev_id = "s3c24xx_led.5",
.table = {
GPIO_LOOKUP("GPG", 4, NULL, GPIO_ACTIVE_HIGH),
{ },
},
};
static struct s3c24xx_led_platdata mini2440_led1_pdata = { static struct s3c24xx_led_platdata mini2440_led1_pdata = {
.name = "led1", .name = "led1",
.gpio = S3C2410_GPB(5),
.flags = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE,
.def_trigger = "heartbeat", .def_trigger = "heartbeat",
}; };
static struct s3c24xx_led_platdata mini2440_led2_pdata = { static struct s3c24xx_led_platdata mini2440_led2_pdata = {
.name = "led2", .name = "led2",
.gpio = S3C2410_GPB(6),
.flags = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE,
.def_trigger = "nand-disk", .def_trigger = "nand-disk",
}; };
static struct s3c24xx_led_platdata mini2440_led3_pdata = { static struct s3c24xx_led_platdata mini2440_led3_pdata = {
.name = "led3", .name = "led3",
.gpio = S3C2410_GPB(7),
.flags = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE,
.def_trigger = "mmc0", .def_trigger = "mmc0",
}; };
static struct s3c24xx_led_platdata mini2440_led4_pdata = { static struct s3c24xx_led_platdata mini2440_led4_pdata = {
.name = "led4", .name = "led4",
.gpio = S3C2410_GPB(8),
.flags = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE,
.def_trigger = "", .def_trigger = "",
}; };
static struct s3c24xx_led_platdata mini2440_led_backlight_pdata = { static struct s3c24xx_led_platdata mini2440_led_backlight_pdata = {
.name = "backlight", .name = "backlight",
.gpio = S3C2410_GPG(4),
.def_trigger = "backlight", .def_trigger = "backlight",
}; };
...@@ -714,6 +745,20 @@ static void __init mini2440_init(void) ...@@ -714,6 +745,20 @@ static void __init mini2440_init(void)
i2c_register_board_info(0, mini2440_i2c_devs, i2c_register_board_info(0, mini2440_i2c_devs,
ARRAY_SIZE(mini2440_i2c_devs)); ARRAY_SIZE(mini2440_i2c_devs));
/* Disable pull-up on the LED lines */
s3c_gpio_setpull(S3C2410_GPB(5), S3C_GPIO_PULL_NONE);
s3c_gpio_setpull(S3C2410_GPB(6), S3C_GPIO_PULL_NONE);
s3c_gpio_setpull(S3C2410_GPB(7), S3C_GPIO_PULL_NONE);
s3c_gpio_setpull(S3C2410_GPB(8), S3C_GPIO_PULL_NONE);
s3c_gpio_setpull(S3C2410_GPG(4), S3C_GPIO_PULL_NONE);
/* Add lookups for the lines */
gpiod_add_lookup_table(&mini2440_led1_gpio_table);
gpiod_add_lookup_table(&mini2440_led2_gpio_table);
gpiod_add_lookup_table(&mini2440_led3_gpio_table);
gpiod_add_lookup_table(&mini2440_led4_gpio_table);
gpiod_add_lookup_table(&mini2440_backlight_gpio_table);
platform_add_devices(mini2440_devices, ARRAY_SIZE(mini2440_devices)); platform_add_devices(mini2440_devices, ARRAY_SIZE(mini2440_devices));
if (features.count) /* the optional features */ if (features.count) /* the optional features */
......
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
// Copyright (c) 2005-2008 Christer Weinigel <christer@weinigel.se> // Copyright (c) 2005-2008 Christer Weinigel <christer@weinigel.se>
// //
// There is a wiki with more information about the n30 port at // There is a wiki with more information about the n30 port at
// http://handhelds.org/moin/moin.cgi/AcerN30Documentation . // https://handhelds.org/moin/moin.cgi/AcerN30Documentation .
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/types.h> #include <linux/types.h>
...@@ -45,6 +45,7 @@ ...@@ -45,6 +45,7 @@
#include <plat/cpu.h> #include <plat/cpu.h>
#include <plat/devs.h> #include <plat/devs.h>
#include <plat/gpio-cfg.h>
#include <linux/platform_data/mmc-s3cmci.h> #include <linux/platform_data/mmc-s3cmci.h>
#include <linux/platform_data/usb-s3c2410_udc.h> #include <linux/platform_data/usb-s3c2410_udc.h>
#include <plat/samsung-time.h> #include <plat/samsung-time.h>
...@@ -246,17 +247,33 @@ static struct platform_device n35_button_device = { ...@@ -246,17 +247,33 @@ static struct platform_device n35_button_device = {
}; };
/* This is the bluetooth LED on the device. */ /* This is the bluetooth LED on the device. */
static struct gpiod_lookup_table n30_blue_led_gpio_table = {
.dev_id = "s3c24xx_led.1",
.table = {
GPIO_LOOKUP("GPG", 6, NULL, GPIO_ACTIVE_HIGH),
{ },
},
};
static struct s3c24xx_led_platdata n30_blue_led_pdata = { static struct s3c24xx_led_platdata n30_blue_led_pdata = {
.name = "blue_led", .name = "blue_led",
.gpio = S3C2410_GPG(6),
.def_trigger = "", .def_trigger = "",
}; };
/* This is the blue LED on the device. Originally used to indicate GPS activity /* This is the blue LED on the device. Originally used to indicate GPS activity
* by flashing. */ * by flashing. */
static struct gpiod_lookup_table n35_blue_led_gpio_table = {
.dev_id = "s3c24xx_led.1",
.table = {
GPIO_LOOKUP("GPD", 8, NULL, GPIO_ACTIVE_HIGH),
{ },
},
};
static struct s3c24xx_led_platdata n35_blue_led_pdata = { static struct s3c24xx_led_platdata n35_blue_led_pdata = {
.name = "blue_led", .name = "blue_led",
.gpio = S3C2410_GPD(8),
.def_trigger = "", .def_trigger = "",
}; };
...@@ -264,17 +281,30 @@ static struct s3c24xx_led_platdata n35_blue_led_pdata = { ...@@ -264,17 +281,30 @@ static struct s3c24xx_led_platdata n35_blue_led_pdata = {
* red, blinking green or solid green when the battery is low, * red, blinking green or solid green when the battery is low,
* charging or full respectively. By driving GPD9 low, it's possible * charging or full respectively. By driving GPD9 low, it's possible
* to force the LED to blink red, so call that warning LED. */ * to force the LED to blink red, so call that warning LED. */
static struct gpiod_lookup_table n30_warning_led_gpio_table = {
.dev_id = "s3c24xx_led.2",
.table = {
GPIO_LOOKUP("GPD", 9, NULL, GPIO_ACTIVE_LOW),
{ },
},
};
static struct s3c24xx_led_platdata n30_warning_led_pdata = { static struct s3c24xx_led_platdata n30_warning_led_pdata = {
.name = "warning_led", .name = "warning_led",
.flags = S3C24XX_LEDF_ACTLOW,
.gpio = S3C2410_GPD(9),
.def_trigger = "", .def_trigger = "",
}; };
static struct gpiod_lookup_table n35_warning_led_gpio_table = {
.dev_id = "s3c24xx_led.2",
.table = {
GPIO_LOOKUP("GPD", 9, NULL, GPIO_ACTIVE_LOW | GPIO_OPEN_DRAIN),
{ },
},
};
static struct s3c24xx_led_platdata n35_warning_led_pdata = { static struct s3c24xx_led_platdata n35_warning_led_pdata = {
.name = "warning_led", .name = "warning_led",
.flags = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE,
.gpio = S3C2410_GPD(9),
.def_trigger = "", .def_trigger = "",
}; };
...@@ -577,6 +607,12 @@ static void __init n30_init(void) ...@@ -577,6 +607,12 @@ static void __init n30_init(void)
S3C2410_MISCCR_USBSUSPND0 | S3C2410_MISCCR_USBSUSPND0 |
S3C2410_MISCCR_USBSUSPND1, 0x0); S3C2410_MISCCR_USBSUSPND1, 0x0);
/* Disable pull-up and add GPIO tables */
s3c_gpio_setpull(S3C2410_GPG(6), S3C_GPIO_PULL_NONE);
s3c_gpio_setpull(S3C2410_GPD(9), S3C_GPIO_PULL_NONE);
gpiod_add_lookup_table(&n30_blue_led_gpio_table);
gpiod_add_lookup_table(&n30_warning_led_gpio_table);
platform_add_devices(n30_devices, ARRAY_SIZE(n30_devices)); platform_add_devices(n30_devices, ARRAY_SIZE(n30_devices));
} }
...@@ -594,6 +630,12 @@ static void __init n30_init(void) ...@@ -594,6 +630,12 @@ static void __init n30_init(void)
S3C2410_MISCCR_USBSUSPND1, S3C2410_MISCCR_USBSUSPND1,
S3C2410_MISCCR_USBSUSPND0); S3C2410_MISCCR_USBSUSPND0);
/* Disable pull-up and add GPIO tables */
s3c_gpio_setpull(S3C2410_GPD(8), S3C_GPIO_PULL_NONE);
s3c_gpio_setpull(S3C2410_GPD(9), S3C_GPIO_PULL_NONE);
gpiod_add_lookup_table(&n35_blue_led_gpio_table);
gpiod_add_lookup_table(&n35_warning_led_gpio_table);
platform_add_devices(n35_devices, ARRAY_SIZE(n35_devices)); platform_add_devices(n35_devices, ARRAY_SIZE(n35_devices));
} }
} }
......
...@@ -177,9 +177,15 @@ static struct platform_device qt2410_cs89x0 = { ...@@ -177,9 +177,15 @@ static struct platform_device qt2410_cs89x0 = {
/* LED */ /* LED */
static struct gpiod_lookup_table qt2410_led_gpio_table = {
.dev_id = "s3c24xx_led.0",
.table = {
GPIO_LOOKUP("GPB", 0, NULL, GPIO_ACTIVE_LOW | GPIO_OPEN_DRAIN),
{ },
},
};
static struct s3c24xx_led_platdata qt2410_pdata_led = { static struct s3c24xx_led_platdata qt2410_pdata_led = {
.gpio = S3C2410_GPB(0),
.flags = S3C24XX_LEDF_ACTLOW | S3C24XX_LEDF_TRISTATE,
.name = "led", .name = "led",
.def_trigger = "timer", .def_trigger = "timer",
}; };
...@@ -338,6 +344,8 @@ static void __init qt2410_machine_init(void) ...@@ -338,6 +344,8 @@ static void __init qt2410_machine_init(void)
s3c_i2c0_set_platdata(NULL); s3c_i2c0_set_platdata(NULL);
gpiod_add_lookup_table(&qt2410_spi_gpiod_table); gpiod_add_lookup_table(&qt2410_spi_gpiod_table);
s3c_gpio_setpull(S3C2410_GPB(0), S3C_GPIO_PULL_NONE);
gpiod_add_lookup_table(&qt2410_led_gpio_table);
platform_add_devices(qt2410_devices, ARRAY_SIZE(qt2410_devices)); platform_add_devices(qt2410_devices, ARRAY_SIZE(qt2410_devices));
s3c_pm_init(); s3c_pm_init();
} }
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
// Copyright (c) 2003-2004 Simtec Electronics // Copyright (c) 2003-2004 Simtec Electronics
// Ben Dooks <ben@simtec.co.uk> // Ben Dooks <ben@simtec.co.uk>
// //
// http://www.handhelds.org/projects/rx3715.html // https://www.handhelds.org/projects/rx3715.html
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/types.h> #include <linux/types.h>
......
...@@ -13,6 +13,7 @@ ...@@ -13,6 +13,7 @@
#include <linux/timer.h> #include <linux/timer.h>
#include <linux/init.h> #include <linux/init.h>
#include <linux/gpio.h> #include <linux/gpio.h>
#include <linux/gpio/machine.h>
#include <linux/dm9000.h> #include <linux/dm9000.h>
#include <linux/i2c.h> #include <linux/i2c.h>
...@@ -40,6 +41,7 @@ ...@@ -40,6 +41,7 @@
#include <plat/cpu.h> #include <plat/cpu.h>
#include <plat/devs.h> #include <plat/devs.h>
#include <plat/gpio-cfg.h>
#include <plat/samsung-time.h> #include <plat/samsung-time.h>
#include "bast.h" #include "bast.h"
...@@ -223,21 +225,42 @@ static struct platform_device vr1000_dm9k1 = { ...@@ -223,21 +225,42 @@ static struct platform_device vr1000_dm9k1 = {
/* LEDS */ /* LEDS */
static struct gpiod_lookup_table vr1000_led1_gpio_table = {
.dev_id = "s3c24xx_led.1",
.table = {
GPIO_LOOKUP("GPB", 0, NULL, GPIO_ACTIVE_HIGH),
{ },
},
};
static struct gpiod_lookup_table vr1000_led2_gpio_table = {
.dev_id = "s3c24xx_led.2",
.table = {
GPIO_LOOKUP("GPB", 1, NULL, GPIO_ACTIVE_HIGH),
{ },
},
};
static struct gpiod_lookup_table vr1000_led3_gpio_table = {
.dev_id = "s3c24xx_led.3",
.table = {
GPIO_LOOKUP("GPB", 2, NULL, GPIO_ACTIVE_HIGH),
{ },
},
};
static struct s3c24xx_led_platdata vr1000_led1_pdata = { static struct s3c24xx_led_platdata vr1000_led1_pdata = {
.name = "led1", .name = "led1",
.gpio = S3C2410_GPB(0),
.def_trigger = "", .def_trigger = "",
}; };
static struct s3c24xx_led_platdata vr1000_led2_pdata = { static struct s3c24xx_led_platdata vr1000_led2_pdata = {
.name = "led2", .name = "led2",
.gpio = S3C2410_GPB(1),
.def_trigger = "", .def_trigger = "",
}; };
static struct s3c24xx_led_platdata vr1000_led3_pdata = { static struct s3c24xx_led_platdata vr1000_led3_pdata = {
.name = "led3", .name = "led3",
.gpio = S3C2410_GPB(2),
.def_trigger = "", .def_trigger = "",
}; };
...@@ -317,6 +340,15 @@ static void __init vr1000_init_time(void) ...@@ -317,6 +340,15 @@ static void __init vr1000_init_time(void)
static void __init vr1000_init(void) static void __init vr1000_init(void)
{ {
s3c_i2c0_set_platdata(NULL); s3c_i2c0_set_platdata(NULL);
/* Disable pull-up on LED lines and register GPIO lookups */
s3c_gpio_setpull(S3C2410_GPB(0), S3C_GPIO_PULL_NONE);
s3c_gpio_setpull(S3C2410_GPB(1), S3C_GPIO_PULL_NONE);
s3c_gpio_setpull(S3C2410_GPB(2), S3C_GPIO_PULL_NONE);
gpiod_add_lookup_table(&vr1000_led1_gpio_table);
gpiod_add_lookup_table(&vr1000_led2_gpio_table);
gpiod_add_lookup_table(&vr1000_led3_gpio_table);
platform_add_devices(vr1000_devices, ARRAY_SIZE(vr1000_devices)); platform_add_devices(vr1000_devices, ARRAY_SIZE(vr1000_devices));
i2c_register_board_info(0, vr1000_i2c_devs, i2c_register_board_info(0, vr1000_i2c_devs,
......
...@@ -49,14 +49,14 @@ static int socfpga_setup_ocram_self_refresh(void) ...@@ -49,14 +49,14 @@ static int socfpga_setup_ocram_self_refresh(void)
if (!ocram_pool) { if (!ocram_pool) {
pr_warn("%s: ocram pool unavailable!\n", __func__); pr_warn("%s: ocram pool unavailable!\n", __func__);
ret = -ENODEV; ret = -ENODEV;
goto put_node; goto put_device;
} }
ocram_base = gen_pool_alloc(ocram_pool, socfpga_sdram_self_refresh_sz); ocram_base = gen_pool_alloc(ocram_pool, socfpga_sdram_self_refresh_sz);
if (!ocram_base) { if (!ocram_base) {
pr_warn("%s: unable to alloc ocram!\n", __func__); pr_warn("%s: unable to alloc ocram!\n", __func__);
ret = -ENOMEM; ret = -ENOMEM;
goto put_node; goto put_device;
} }
ocram_pbase = gen_pool_virt_to_phys(ocram_pool, ocram_base); ocram_pbase = gen_pool_virt_to_phys(ocram_pool, ocram_base);
...@@ -67,7 +67,7 @@ static int socfpga_setup_ocram_self_refresh(void) ...@@ -67,7 +67,7 @@ static int socfpga_setup_ocram_self_refresh(void)
if (!suspend_ocram_base) { if (!suspend_ocram_base) {
pr_warn("%s: __arm_ioremap_exec failed!\n", __func__); pr_warn("%s: __arm_ioremap_exec failed!\n", __func__);
ret = -ENOMEM; ret = -ENOMEM;
goto put_node; goto put_device;
} }
/* Copy the code that puts DDR in self refresh to ocram */ /* Copy the code that puts DDR in self refresh to ocram */
...@@ -81,6 +81,8 @@ static int socfpga_setup_ocram_self_refresh(void) ...@@ -81,6 +81,8 @@ static int socfpga_setup_ocram_self_refresh(void)
if (!socfpga_sdram_self_refresh_in_ocram) if (!socfpga_sdram_self_refresh_in_ocram)
ret = -EFAULT; ret = -EFAULT;
put_device:
put_device(&pdev->dev);
put_node: put_node:
of_node_put(np); of_node_put(np);
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
* *
* Support functions for the OMAP internal DMA channels. * Support functions for the OMAP internal DMA channels.
* *
* Copyright (C) 2010 Texas Instruments Incorporated - http://www.ti.com/ * Copyright (C) 2010 Texas Instruments Incorporated - https://www.ti.com/
* Converted DMA library into DMA platform driver. * Converted DMA library into DMA platform driver.
* - G, Manjunath Kondaiah <manjugk@ti.com> * - G, Manjunath Kondaiah <manjugk@ti.com>
*/ */
......
...@@ -442,6 +442,7 @@ static void orion_gpio_dbg_show(struct seq_file *s, struct gpio_chip *chip) ...@@ -442,6 +442,7 @@ static void orion_gpio_dbg_show(struct seq_file *s, struct gpio_chip *chip)
struct orion_gpio_chip *ochip = gpiochip_get_data(chip); struct orion_gpio_chip *ochip = gpiochip_get_data(chip);
u32 out, io_conf, blink, in_pol, data_in, cause, edg_msk, lvl_msk; u32 out, io_conf, blink, in_pol, data_in, cause, edg_msk, lvl_msk;
const char *label;
int i; int i;
out = readl_relaxed(GPIO_OUT(ochip)); out = readl_relaxed(GPIO_OUT(ochip));
...@@ -453,15 +454,10 @@ static void orion_gpio_dbg_show(struct seq_file *s, struct gpio_chip *chip) ...@@ -453,15 +454,10 @@ static void orion_gpio_dbg_show(struct seq_file *s, struct gpio_chip *chip)
edg_msk = readl_relaxed(GPIO_EDGE_MASK(ochip)); edg_msk = readl_relaxed(GPIO_EDGE_MASK(ochip));
lvl_msk = readl_relaxed(GPIO_LEVEL_MASK(ochip)); lvl_msk = readl_relaxed(GPIO_LEVEL_MASK(ochip));
for (i = 0; i < chip->ngpio; i++) { for_each_requested_gpio(chip, i, label) {
const char *label;
u32 msk; u32 msk;
bool is_out; bool is_out;
label = gpiochip_is_requested(chip, i);
if (!label)
continue;
msk = 1 << i; msk = 1 << i;
is_out = !(io_conf & msk); is_out = !(io_conf & msk);
......
...@@ -11,19 +11,19 @@ ...@@ -11,19 +11,19 @@
#include <linux/kernel.h> #include <linux/kernel.h>
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/leds.h> #include <linux/leds.h>
#include <linux/gpio.h> #include <linux/gpio/consumer.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/module.h> #include <linux/module.h>
#include <linux/platform_data/leds-s3c24xx.h> #include <linux/platform_data/leds-s3c24xx.h>
#include <mach/regs-gpio.h> #include <mach/regs-gpio.h>
#include <plat/gpio-cfg.h>
/* our context */ /* our context */
struct s3c24xx_gpio_led { struct s3c24xx_gpio_led {
struct led_classdev cdev; struct led_classdev cdev;
struct s3c24xx_led_platdata *pdata; struct s3c24xx_led_platdata *pdata;
struct gpio_desc *gpiod;
}; };
static inline struct s3c24xx_gpio_led *to_gpio(struct led_classdev *led_cdev) static inline struct s3c24xx_gpio_led *to_gpio(struct led_classdev *led_cdev)
...@@ -35,20 +35,8 @@ static void s3c24xx_led_set(struct led_classdev *led_cdev, ...@@ -35,20 +35,8 @@ static void s3c24xx_led_set(struct led_classdev *led_cdev,
enum led_brightness value) enum led_brightness value)
{ {
struct s3c24xx_gpio_led *led = to_gpio(led_cdev); struct s3c24xx_gpio_led *led = to_gpio(led_cdev);
struct s3c24xx_led_platdata *pd = led->pdata;
int state = (value ? 1 : 0) ^ (pd->flags & S3C24XX_LEDF_ACTLOW);
/* there will be a short delay between setting the output and gpiod_set_value(led->gpiod, !!value);
* going from output to input when using tristate. */
gpio_set_value(pd->gpio, state);
if (pd->flags & S3C24XX_LEDF_TRISTATE) {
if (value)
gpio_direction_output(pd->gpio, state);
else
gpio_direction_input(pd->gpio);
}
} }
static int s3c24xx_led_probe(struct platform_device *dev) static int s3c24xx_led_probe(struct platform_device *dev)
...@@ -69,22 +57,12 @@ static int s3c24xx_led_probe(struct platform_device *dev) ...@@ -69,22 +57,12 @@ static int s3c24xx_led_probe(struct platform_device *dev)
led->pdata = pdata; led->pdata = pdata;
ret = devm_gpio_request(&dev->dev, pdata->gpio, "S3C24XX_LED"); /* Default to off */
if (ret < 0) led->gpiod = devm_gpiod_get(&dev->dev, NULL, GPIOD_OUT_LOW);
return ret; if (IS_ERR(led->gpiod))
return PTR_ERR(led->gpiod);
/* no point in having a pull-up if we are always driving */
s3c_gpio_setpull(pdata->gpio, S3C_GPIO_PULL_NONE);
if (pdata->flags & S3C24XX_LEDF_TRISTATE)
gpio_direction_input(pdata->gpio);
else
gpio_direction_output(pdata->gpio,
pdata->flags & S3C24XX_LEDF_ACTLOW ? 1 : 0);
/* register our new led device */ /* register our new led device */
ret = devm_led_classdev_register(&dev->dev, &led->cdev); ret = devm_led_classdev_register(&dev->dev, &led->cdev);
if (ret < 0) if (ret < 0)
dev_err(&dev->dev, "led_classdev_register failed\n"); dev_err(&dev->dev, "led_classdev_register failed\n");
......
...@@ -1926,7 +1926,7 @@ static const struct usb_ep_ops lpc32xx_ep_ops = { ...@@ -1926,7 +1926,7 @@ static const struct usb_ep_ops lpc32xx_ep_ops = {
}; };
/* Send a ZLP on a non-0 IN EP */ /* Send a ZLP on a non-0 IN EP */
void udc_send_in_zlp(struct lpc32xx_udc *udc, struct lpc32xx_ep *ep) static void udc_send_in_zlp(struct lpc32xx_udc *udc, struct lpc32xx_ep *ep)
{ {
/* Clear EP status */ /* Clear EP status */
udc_clearep_getsts(udc, ep->hwep_num); udc_clearep_getsts(udc, ep->hwep_num);
...@@ -1940,7 +1940,7 @@ void udc_send_in_zlp(struct lpc32xx_udc *udc, struct lpc32xx_ep *ep) ...@@ -1940,7 +1940,7 @@ void udc_send_in_zlp(struct lpc32xx_udc *udc, struct lpc32xx_ep *ep)
* This function will only be called when a delayed ZLP needs to be sent out * This function will only be called when a delayed ZLP needs to be sent out
* after a DMA transfer has filled both buffers. * after a DMA transfer has filled both buffers.
*/ */
void udc_handle_eps(struct lpc32xx_udc *udc, struct lpc32xx_ep *ep) static void udc_handle_eps(struct lpc32xx_udc *udc, struct lpc32xx_ep *ep)
{ {
u32 epstatus; u32 epstatus;
struct lpc32xx_request *req; struct lpc32xx_request *req;
......
...@@ -10,13 +10,7 @@ ...@@ -10,13 +10,7 @@
#ifndef __LEDS_S3C24XX_H #ifndef __LEDS_S3C24XX_H
#define __LEDS_S3C24XX_H #define __LEDS_S3C24XX_H
#define S3C24XX_LEDF_ACTLOW (1<<0) /* LED is on when GPIO low */
#define S3C24XX_LEDF_TRISTATE (1<<1) /* tristate to turn off */
struct s3c24xx_led_platdata { struct s3c24xx_led_platdata {
unsigned int gpio;
unsigned int flags;
char *name; char *name;
char *def_trigger; char *def_trigger;
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment