You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge tag 'omap-devel-dt-merged-for-v3.7' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap into next/dt
Device tree related changes for omaps. Note that this branch is based on omap-cleanup-sparseirq-for-v3.7 to avoid merge conflicts with the sparseirq changes for gpio-twl4030 driver. * tag 'omap-devel-dt-merged-for-v3.7' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap: arm/dts: Mux uart pins for omap4-sdp ARM: OMAP2+: select PINCTRL in Kconfig arm/dts: Add pinctrl driver entries for omap2/3/4 arm/dts: Add omap36xx.dtsi file and rename omap3-beagle to omap3-beagle-xm ARM: dts: omap3-overo: Add support for the blue LED Documentation: dt: Update the OMAP documentation with Overo/Toby ARM: dts: OMAP3: Add support for Gumstix Overo with Tobi expansion board ARM: dts: OMAP4: Add reg and interrupts for every nodes ARM: dts: AM33XX: Specify reg and interrupt property for all nodes ARM: dts: AM33XX: Convert all hex numbers to lower-case ARM: dts: omap3-beagle: Enable audio support ARM: dts: omap5: Add McPDM and DMIC section to the dtsi file ARM: dts: omap5: Add McBSP entries ARM: dts: omap4: Add reg-names for McPDM and DMIC ARM: dts: omap4: Add McBSP entries ARM: dts: omap3: Add McBSP entries ARM: dts: omap2420-h4: Include omap2420.dtsi file instead the common omap2 ARM: dts: omap2: Add McBSP entries for OMAP2420 and OMAP2430 SoC ARM: dts: omap3-beagle: Add heartbeat and mmc LEDs support ARM: dts: omap3: Add gpio-twl4030 properties for BeagleBoard and omap3-EVM ...
This commit is contained in:
@@ -294,7 +294,7 @@ config GPIO_MAX732X_IRQ
|
||||
|
||||
config GPIO_MC9S08DZ60
|
||||
bool "MX35 3DS BOARD MC9S08DZ60 GPIO functions"
|
||||
depends on I2C && MACH_MX35_3DS
|
||||
depends on I2C=y && MACH_MX35_3DS
|
||||
help
|
||||
Select this to enable the MC9S08DZ60 GPIO driver
|
||||
|
||||
|
||||
@@ -247,9 +247,9 @@ static int __devinit em_gio_irq_domain_init(struct em_gio_priv *p)
|
||||
|
||||
p->irq_base = irq_alloc_descs(pdata->irq_base, 0,
|
||||
pdata->number_of_pins, numa_node_id());
|
||||
if (IS_ERR_VALUE(p->irq_base)) {
|
||||
if (p->irq_base < 0) {
|
||||
dev_err(&pdev->dev, "cannot get irq_desc\n");
|
||||
return -ENXIO;
|
||||
return p->irq_base;
|
||||
}
|
||||
pr_debug("gio: hw base = %d, nr = %d, sw base = %d\n",
|
||||
pdata->gpio_base, pdata->number_of_pins, p->irq_base);
|
||||
|
||||
@@ -25,11 +25,9 @@
|
||||
#include <linux/of.h>
|
||||
#include <linux/of_device.h>
|
||||
#include <linux/irqdomain.h>
|
||||
#include <linux/gpio.h>
|
||||
#include <linux/platform_data/gpio-omap.h>
|
||||
|
||||
#include <mach/hardware.h>
|
||||
#include <asm/irq.h>
|
||||
#include <mach/irqs.h>
|
||||
#include <asm/gpio.h>
|
||||
#include <asm/mach/irq.h>
|
||||
|
||||
#define OFF_MODE 1
|
||||
@@ -385,13 +383,16 @@ static int _set_gpio_triggering(struct gpio_bank *bank, int gpio,
|
||||
static int gpio_irq_type(struct irq_data *d, unsigned type)
|
||||
{
|
||||
struct gpio_bank *bank = irq_data_get_irq_chip_data(d);
|
||||
unsigned gpio;
|
||||
unsigned gpio = 0;
|
||||
int retval;
|
||||
unsigned long flags;
|
||||
|
||||
if (!cpu_class_is_omap2() && d->irq > IH_MPUIO_BASE)
|
||||
#ifdef CONFIG_ARCH_OMAP1
|
||||
if (d->irq > IH_MPUIO_BASE)
|
||||
gpio = OMAP_MPUIO(d->irq - IH_MPUIO_BASE);
|
||||
else
|
||||
#endif
|
||||
|
||||
if (!gpio)
|
||||
gpio = irq_to_gpio(bank, d->irq);
|
||||
|
||||
if (type & ~IRQ_TYPE_SENSE_MASK)
|
||||
|
||||
@@ -170,6 +170,7 @@ static int __devinit rdc321x_gpio_probe(struct platform_device *pdev)
|
||||
rdc321x_gpio_dev->reg2_data_base = r->start + 0x4;
|
||||
|
||||
rdc321x_gpio_dev->chip.label = "rdc321x-gpio";
|
||||
rdc321x_gpio_dev->chip.owner = THIS_MODULE;
|
||||
rdc321x_gpio_dev->chip.direction_input = rdc_gpio_direction_input;
|
||||
rdc321x_gpio_dev->chip.direction_output = rdc_gpio_config;
|
||||
rdc321x_gpio_dev->chip.get = rdc_gpio_get_value;
|
||||
|
||||
+61
-29
@@ -51,6 +51,7 @@
|
||||
|
||||
|
||||
static struct gpio_chip twl_gpiochip;
|
||||
static int twl4030_gpio_base;
|
||||
static int twl4030_gpio_irq_base;
|
||||
|
||||
/* genirq interfaces are not available to modules */
|
||||
@@ -395,6 +396,29 @@ static int __devinit gpio_twl4030_debounce(u32 debounce, u8 mmc_cd)
|
||||
|
||||
static int gpio_twl4030_remove(struct platform_device *pdev);
|
||||
|
||||
static struct twl4030_gpio_platform_data *of_gpio_twl4030(struct device *dev)
|
||||
{
|
||||
struct twl4030_gpio_platform_data *omap_twl_info;
|
||||
|
||||
omap_twl_info = devm_kzalloc(dev, sizeof(*omap_twl_info), GFP_KERNEL);
|
||||
if (!omap_twl_info)
|
||||
return NULL;
|
||||
|
||||
omap_twl_info->use_leds = of_property_read_bool(dev->of_node,
|
||||
"ti,use-leds");
|
||||
|
||||
of_property_read_u32(dev->of_node, "ti,debounce",
|
||||
&omap_twl_info->debounce);
|
||||
of_property_read_u32(dev->of_node, "ti,mmc-cd",
|
||||
(u32 *)&omap_twl_info->mmc_cd);
|
||||
of_property_read_u32(dev->of_node, "ti,pullups",
|
||||
&omap_twl_info->pullups);
|
||||
of_property_read_u32(dev->of_node, "ti,pulldowns",
|
||||
&omap_twl_info->pulldowns);
|
||||
|
||||
return omap_twl_info;
|
||||
}
|
||||
|
||||
static int __devinit gpio_twl4030_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct twl4030_gpio_platform_data *pdata = pdev->dev.platform_data;
|
||||
@@ -427,49 +451,57 @@ no_irqs:
|
||||
twl_gpiochip.ngpio = TWL4030_GPIO_MAX;
|
||||
twl_gpiochip.dev = &pdev->dev;
|
||||
|
||||
if (pdata) {
|
||||
twl_gpiochip.base = pdata->gpio_base;
|
||||
if (node)
|
||||
pdata = of_gpio_twl4030(&pdev->dev);
|
||||
|
||||
/*
|
||||
* NOTE: boards may waste power if they don't set pullups
|
||||
* and pulldowns correctly ... default for non-ULPI pins is
|
||||
* pulldown, and some other pins may have external pullups
|
||||
* or pulldowns. Careful!
|
||||
*/
|
||||
ret = gpio_twl4030_pulls(pdata->pullups, pdata->pulldowns);
|
||||
if (ret)
|
||||
dev_dbg(&pdev->dev, "pullups %.05x %.05x --> %d\n",
|
||||
pdata->pullups, pdata->pulldowns,
|
||||
ret);
|
||||
|
||||
ret = gpio_twl4030_debounce(pdata->debounce, pdata->mmc_cd);
|
||||
if (ret)
|
||||
dev_dbg(&pdev->dev, "debounce %.03x %.01x --> %d\n",
|
||||
pdata->debounce, pdata->mmc_cd,
|
||||
ret);
|
||||
|
||||
/*
|
||||
* NOTE: we assume VIBRA_CTL.VIBRA_EN, in MODULE_AUDIO_VOICE,
|
||||
* is (still) clear if use_leds is set.
|
||||
*/
|
||||
if (pdata->use_leds)
|
||||
twl_gpiochip.ngpio += 2;
|
||||
if (pdata == NULL) {
|
||||
dev_err(&pdev->dev, "Platform data is missing\n");
|
||||
return -ENXIO;
|
||||
}
|
||||
|
||||
/*
|
||||
* NOTE: boards may waste power if they don't set pullups
|
||||
* and pulldowns correctly ... default for non-ULPI pins is
|
||||
* pulldown, and some other pins may have external pullups
|
||||
* or pulldowns. Careful!
|
||||
*/
|
||||
ret = gpio_twl4030_pulls(pdata->pullups, pdata->pulldowns);
|
||||
if (ret)
|
||||
dev_dbg(&pdev->dev, "pullups %.05x %.05x --> %d\n",
|
||||
pdata->pullups, pdata->pulldowns, ret);
|
||||
|
||||
ret = gpio_twl4030_debounce(pdata->debounce, pdata->mmc_cd);
|
||||
if (ret)
|
||||
dev_dbg(&pdev->dev, "debounce %.03x %.01x --> %d\n",
|
||||
pdata->debounce, pdata->mmc_cd, ret);
|
||||
|
||||
/*
|
||||
* NOTE: we assume VIBRA_CTL.VIBRA_EN, in MODULE_AUDIO_VOICE,
|
||||
* is (still) clear if use_leds is set.
|
||||
*/
|
||||
if (pdata->use_leds)
|
||||
twl_gpiochip.ngpio += 2;
|
||||
|
||||
ret = gpiochip_add(&twl_gpiochip);
|
||||
if (ret < 0) {
|
||||
dev_err(&pdev->dev, "could not register gpiochip, %d\n", ret);
|
||||
twl_gpiochip.ngpio = 0;
|
||||
gpio_twl4030_remove(pdev);
|
||||
} else if (pdata && pdata->setup) {
|
||||
goto out;
|
||||
}
|
||||
|
||||
twl4030_gpio_base = twl_gpiochip.base;
|
||||
|
||||
if (pdata && pdata->setup) {
|
||||
int status;
|
||||
|
||||
status = pdata->setup(&pdev->dev,
|
||||
pdata->gpio_base, TWL4030_GPIO_MAX);
|
||||
twl4030_gpio_base, TWL4030_GPIO_MAX);
|
||||
if (status)
|
||||
dev_dbg(&pdev->dev, "setup --> %d\n", status);
|
||||
}
|
||||
|
||||
out:
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -481,7 +513,7 @@ static int gpio_twl4030_remove(struct platform_device *pdev)
|
||||
|
||||
if (pdata && pdata->teardown) {
|
||||
status = pdata->teardown(&pdev->dev,
|
||||
pdata->gpio_base, TWL4030_GPIO_MAX);
|
||||
twl4030_gpio_base, TWL4030_GPIO_MAX);
|
||||
if (status) {
|
||||
dev_dbg(&pdev->dev, "teardown --> %d\n", status);
|
||||
return status;
|
||||
|
||||
@@ -82,7 +82,7 @@ int of_get_named_gpio_flags(struct device_node *np, const char *propname,
|
||||
gpiochip_find(&gg_data, of_gpiochip_find_and_xlate);
|
||||
|
||||
of_node_put(gg_data.gpiospec.np);
|
||||
pr_debug("%s exited with status %d\n", __func__, ret);
|
||||
pr_debug("%s exited with status %d\n", __func__, gg_data.out_gpio);
|
||||
return gg_data.out_gpio;
|
||||
}
|
||||
EXPORT_SYMBOL(of_get_named_gpio_flags);
|
||||
|
||||
Reference in New Issue
Block a user