Commit 474dbaa7 authored by Olof Johansson's avatar Olof Johansson

Merge tag 'omap-for-v3.10/fixes-for-merge-window-part2' of...

Merge tag 'omap-for-v3.10/fixes-for-merge-window-part2' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap into fixes

From Tony Lindgren:
Omap fixes for things that were discovered during the merge window:

- Few GPMC fixes and binding doc updates noted after sending
  pull requests for the GPMC branch.
- Board fixes for beagle usb host and rx51 spi probe order
- SoC fixes dt earlyprintk, omap1 dma and omap2+ id.c error
  handling fixes

Then few minor things that are not strictly fixes but are good
to get out of the way:

- Add missing legacy mux registers for am/dm73x gpio
- Add detection for am33xx pg2.1 silicon
- Enable twl4030 audio modules in defconfig

* tag 'omap-for-v3.10/fixes-for-merge-window-part2' of git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap:
  ARM: OMAP2+: Remove bogus IS_ERR_OR_NULL checking from id.c
  ARM: OMAP4+: omap2plus_defconfig: Enable audio via TWL6040 as module
  ARM: OMAP2: AM33XX: id: Add support for new AM335x PG2.1 Si
  omap: mux: add AM/DM37x gpios
  ARM: OMAP1: DMA: fix error handling in omap1_system_dma_init()
  ARM: OMAP2+: omap_device: use late_initcall_sync
  ARM: OMAP: RX-51: change probe order of touchscreen and panel SPI devices
  ARM: OMAP3: Beagle: Fix USB Host on beagle xM Ax/Bx
  ARM: OMAP2+: only WARN if a GPMC child probe function fail
  ARM: OMAP2+: only search for GPMC DT child nodes on probe
  Documentation: dt: update properties in TI GPMC NAND example
  Documentation: dt: update TI GPMC ethernet binding properties
Signed-off-by: default avatarOlof Johansson <olof@lixom.net>
parents 27d4cdca b1dd11d6
...@@ -56,20 +56,20 @@ Example for an AM33xx board: ...@@ -56,20 +56,20 @@ Example for an AM33xx board:
nand-bus-width = <16>; nand-bus-width = <16>;
ti,nand-ecc-opt = "bch8"; ti,nand-ecc-opt = "bch8";
gpmc,sync-clk = <0>; gpmc,sync-clk-ps = <0>;
gpmc,cs-on = <0>; gpmc,cs-on-ns = <0>;
gpmc,cs-rd-off = <44>; gpmc,cs-rd-off-ns = <44>;
gpmc,cs-wr-off = <44>; gpmc,cs-wr-off-ns = <44>;
gpmc,adv-on = <6>; gpmc,adv-on-ns = <6>;
gpmc,adv-rd-off = <34>; gpmc,adv-rd-off-ns = <34>;
gpmc,adv-wr-off = <44>; gpmc,adv-wr-off-ns = <44>;
gpmc,we-off = <40>; gpmc,we-off-ns = <40>;
gpmc,oe-off = <54>; gpmc,oe-off-ns = <54>;
gpmc,access = <64>; gpmc,access-ns = <64>;
gpmc,rd-cycle = <82>; gpmc,rd-cycle-ns = <82>;
gpmc,wr-cycle = <82>; gpmc,wr-cycle-ns = <82>;
gpmc,wr-access = <40>; gpmc,wr-access-ns = <40>;
gpmc,wr-data-mux-bus = <0>; gpmc,wr-data-mux-bus-ns = <0>;
#address-cells = <1>; #address-cells = <1>;
#size-cells = <1>; #size-cells = <1>;
......
...@@ -26,16 +26,16 @@ Required properties: ...@@ -26,16 +26,16 @@ Required properties:
- bank-width: Address width of the device in bytes. GPMC supports 8-bit - bank-width: Address width of the device in bytes. GPMC supports 8-bit
and 16-bit devices and so must be either 1 or 2 bytes. and 16-bit devices and so must be either 1 or 2 bytes.
- compatible: Compatible string property for the ethernet child device. - compatible: Compatible string property for the ethernet child device.
- gpmc,cs-on: Chip-select assertion time - gpmc,cs-on-ns: Chip-select assertion time
- gpmc,cs-rd-off: Chip-select de-assertion time for reads - gpmc,cs-rd-off-ns: Chip-select de-assertion time for reads
- gpmc,cs-wr-off: Chip-select de-assertion time for writes - gpmc,cs-wr-off-ns: Chip-select de-assertion time for writes
- gpmc,oe-on: Output-enable assertion time - gpmc,oe-on-ns: Output-enable assertion time
- gpmc,oe-off Output-enable de-assertion time - gpmc,oe-off-ns: Output-enable de-assertion time
- gpmc,we-on: Write-enable assertion time - gpmc,we-on-ns: Write-enable assertion time
- gpmc,we-off: Write-enable de-assertion time - gpmc,we-off-ns: Write-enable de-assertion time
- gpmc,access: Start cycle to first data capture (read access) - gpmc,access-ns: Start cycle to first data capture (read access)
- gpmc,rd-cycle: Total read cycle time - gpmc,rd-cycle-ns: Total read cycle time
- gpmc,wr-cycle: Total write cycle time - gpmc,wr-cycle-ns: Total write cycle time
- reg: Chip-select, base address (relative to chip-select) - reg: Chip-select, base address (relative to chip-select)
and size of the memory mapped for the device. and size of the memory mapped for the device.
Note that base address will be typically 0 as this Note that base address will be typically 0 as this
...@@ -65,24 +65,24 @@ gpmc: gpmc@6e000000 { ...@@ -65,24 +65,24 @@ gpmc: gpmc@6e000000 {
bank-width = <2>; bank-width = <2>;
gpmc,mux-add-data; gpmc,mux-add-data;
gpmc,cs-on = <0>; gpmc,cs-on-ns = <0>;
gpmc,cs-rd-off = <186>; gpmc,cs-rd-off-ns = <186>;
gpmc,cs-wr-off = <186>; gpmc,cs-wr-off-ns = <186>;
gpmc,adv-on = <12>; gpmc,adv-on-ns = <12>;
gpmc,adv-rd-off = <48>; gpmc,adv-rd-off-ns = <48>;
gpmc,adv-wr-off = <48>; gpmc,adv-wr-off-ns = <48>;
gpmc,oe-on = <54>; gpmc,oe-on-ns = <54>;
gpmc,oe-off = <168>; gpmc,oe-off-ns = <168>;
gpmc,we-on = <54>; gpmc,we-on-ns = <54>;
gpmc,we-off = <168>; gpmc,we-off-ns = <168>;
gpmc,rd-cycle = <186>; gpmc,rd-cycle-ns = <186>;
gpmc,wr-cycle = <186>; gpmc,wr-cycle-ns = <186>;
gpmc,access = <114>; gpmc,access-ns = <114>;
gpmc,page-burst-access = <6>; gpmc,page-burst-access-ns = <6>;
gpmc,bus-turnaround = <12>; gpmc,bus-turnaround-ns = <12>;
gpmc,cycle2cycle-delay = <18>; gpmc,cycle2cycle-delay-ns = <18>;
gpmc,wr-data-mux-bus = <90>; gpmc,wr-data-mux-bus-ns = <90>;
gpmc,wr-access = <186>; gpmc,wr-access-ns = <186>;
gpmc,cycle2cycle-samecsen; gpmc,cycle2cycle-samecsen;
gpmc,cycle2cycle-diffcsen; gpmc,cycle2cycle-diffcsen;
......
...@@ -155,6 +155,7 @@ CONFIG_OMAP_WATCHDOG=y ...@@ -155,6 +155,7 @@ CONFIG_OMAP_WATCHDOG=y
CONFIG_TWL4030_WATCHDOG=y CONFIG_TWL4030_WATCHDOG=y
CONFIG_MFD_TPS65217=y CONFIG_MFD_TPS65217=y
CONFIG_MFD_TPS65910=y CONFIG_MFD_TPS65910=y
CONFIG_TWL6040_CORE=y
CONFIG_REGULATOR_TWL4030=y CONFIG_REGULATOR_TWL4030=y
CONFIG_REGULATOR_TPS65023=y CONFIG_REGULATOR_TPS65023=y
CONFIG_REGULATOR_TPS6507X=y CONFIG_REGULATOR_TPS6507X=y
...@@ -197,6 +198,7 @@ CONFIG_SND_USB_AUDIO=m ...@@ -197,6 +198,7 @@ CONFIG_SND_USB_AUDIO=m
CONFIG_SND_SOC=m CONFIG_SND_SOC=m
CONFIG_SND_OMAP_SOC=m CONFIG_SND_OMAP_SOC=m
CONFIG_SND_OMAP_SOC_OMAP_TWL4030=m CONFIG_SND_OMAP_SOC_OMAP_TWL4030=m
CONFIG_SND_OMAP_SOC_OMAP_ABE_TWL6040=m
CONFIG_SND_OMAP_SOC_OMAP3_PANDORA=m CONFIG_SND_OMAP_SOC_OMAP3_PANDORA=m
CONFIG_USB=y CONFIG_USB=y
CONFIG_USB_DEBUG=y CONFIG_USB_DEBUG=y
......
...@@ -301,7 +301,7 @@ static int __init omap1_system_dma_init(void) ...@@ -301,7 +301,7 @@ static int __init omap1_system_dma_init(void)
if (ret) { if (ret) {
dev_err(&pdev->dev, "%s: Unable to add resources for %s%d\n", dev_err(&pdev->dev, "%s: Unable to add resources for %s%d\n",
__func__, pdev->name, pdev->id); __func__, pdev->name, pdev->id);
goto exit_device_put; goto exit_iounmap;
} }
p = kzalloc(sizeof(struct omap_system_dma_plat_info), GFP_KERNEL); p = kzalloc(sizeof(struct omap_system_dma_plat_info), GFP_KERNEL);
...@@ -309,7 +309,7 @@ static int __init omap1_system_dma_init(void) ...@@ -309,7 +309,7 @@ static int __init omap1_system_dma_init(void)
dev_err(&pdev->dev, "%s: Unable to allocate 'p' for %s\n", dev_err(&pdev->dev, "%s: Unable to allocate 'p' for %s\n",
__func__, pdev->name); __func__, pdev->name);
ret = -ENOMEM; ret = -ENOMEM;
goto exit_device_del; goto exit_iounmap;
} }
d = kzalloc(sizeof(struct omap_dma_dev_attr), GFP_KERNEL); d = kzalloc(sizeof(struct omap_dma_dev_attr), GFP_KERNEL);
...@@ -402,8 +402,8 @@ exit_release_d: ...@@ -402,8 +402,8 @@ exit_release_d:
kfree(d); kfree(d);
exit_release_p: exit_release_p:
kfree(p); kfree(p);
exit_device_del: exit_iounmap:
platform_device_del(pdev); iounmap(dma_base);
exit_device_put: exit_device_put:
platform_device_put(pdev); platform_device_put(pdev);
......
...@@ -112,13 +112,13 @@ static u8 omap3_beagle_version; ...@@ -112,13 +112,13 @@ static u8 omap3_beagle_version;
*/ */
static struct { static struct {
int mmc1_gpio_wp; int mmc1_gpio_wp;
int usb_pwr_level; bool usb_pwr_level; /* 0 - Active Low, 1 - Active High */
int dvi_pd_gpio; int dvi_pd_gpio;
int usr_button_gpio; int usr_button_gpio;
int mmc_caps; int mmc_caps;
} beagle_config = { } beagle_config = {
.mmc1_gpio_wp = -EINVAL, .mmc1_gpio_wp = -EINVAL,
.usb_pwr_level = GPIOF_OUT_INIT_LOW, .usb_pwr_level = 0,
.dvi_pd_gpio = -EINVAL, .dvi_pd_gpio = -EINVAL,
.usr_button_gpio = 4, .usr_button_gpio = 4,
.mmc_caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA, .mmc_caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
...@@ -178,7 +178,7 @@ static void __init omap3_beagle_init_rev(void) ...@@ -178,7 +178,7 @@ static void __init omap3_beagle_init_rev(void)
case 0: case 0:
printk(KERN_INFO "OMAP3 Beagle Rev: xM Ax/Bx\n"); printk(KERN_INFO "OMAP3 Beagle Rev: xM Ax/Bx\n");
omap3_beagle_version = OMAP3BEAGLE_BOARD_XM; omap3_beagle_version = OMAP3BEAGLE_BOARD_XM;
beagle_config.usb_pwr_level = GPIOF_OUT_INIT_HIGH; beagle_config.usb_pwr_level = 1;
beagle_config.mmc_caps &= ~MMC_CAP_8_BIT_DATA; beagle_config.mmc_caps &= ~MMC_CAP_8_BIT_DATA;
break; break;
case 2: case 2:
......
...@@ -73,11 +73,11 @@ ...@@ -73,11 +73,11 @@
#define LIS302_IRQ1_GPIO 181 #define LIS302_IRQ1_GPIO 181
#define LIS302_IRQ2_GPIO 180 /* Not yet in use */ #define LIS302_IRQ2_GPIO 180 /* Not yet in use */
/* list all spi devices here */ /* List all SPI devices here. Note that the list/probe order seems to matter! */
enum { enum {
RX51_SPI_WL1251, RX51_SPI_WL1251,
RX51_SPI_MIPID, /* LCD panel */
RX51_SPI_TSC2005, /* Touch Controller */ RX51_SPI_TSC2005, /* Touch Controller */
RX51_SPI_MIPID, /* LCD panel */
}; };
static struct wl12xx_platform_data wl1251_pdata; static struct wl12xx_platform_data wl1251_pdata;
......
...@@ -1520,36 +1520,22 @@ static int gpmc_probe_dt(struct platform_device *pdev) ...@@ -1520,36 +1520,22 @@ static int gpmc_probe_dt(struct platform_device *pdev)
return ret; return ret;
} }
for_each_node_by_name(child, "nand") { for_each_child_of_node(pdev->dev.of_node, child) {
ret = gpmc_probe_nand_child(pdev, child);
if (ret < 0) {
of_node_put(child);
return ret;
}
}
for_each_node_by_name(child, "onenand") { if (!child->name)
ret = gpmc_probe_onenand_child(pdev, child); continue;
if (ret < 0) {
of_node_put(child);
return ret;
}
}
for_each_node_by_name(child, "nor") { if (of_node_cmp(child->name, "nand") == 0)
ret = gpmc_probe_generic_child(pdev, child); ret = gpmc_probe_nand_child(pdev, child);
if (ret < 0) { else if (of_node_cmp(child->name, "onenand") == 0)
of_node_put(child); ret = gpmc_probe_onenand_child(pdev, child);
return ret; else if (of_node_cmp(child->name, "ethernet") == 0 ||
} of_node_cmp(child->name, "nor") == 0)
} ret = gpmc_probe_generic_child(pdev, child);
for_each_node_by_name(child, "ethernet") { if (WARN(ret < 0, "%s: probing gpmc child %s failed\n",
ret = gpmc_probe_generic_child(pdev, child); __func__, child->full_name))
if (ret < 0) {
of_node_put(child); of_node_put(child);
return ret;
}
} }
return 0; return 0;
......
...@@ -419,11 +419,15 @@ void __init omap3xxx_check_revision(void) ...@@ -419,11 +419,15 @@ void __init omap3xxx_check_revision(void)
cpu_rev = "1.0"; cpu_rev = "1.0";
break; break;
case 1: case 1:
/* FALLTHROUGH */
default:
omap_revision = AM335X_REV_ES2_0; omap_revision = AM335X_REV_ES2_0;
cpu_rev = "2.0"; cpu_rev = "2.0";
break; break;
case 2:
/* FALLTHROUGH */
default:
omap_revision = AM335X_REV_ES2_1;
cpu_rev = "2.1";
break;
} }
break; break;
case 0xb8f2: case 0xb8f2:
...@@ -644,13 +648,12 @@ void __init omap_soc_device_init(void) ...@@ -644,13 +648,12 @@ void __init omap_soc_device_init(void)
soc_dev_attr->revision = soc_rev; soc_dev_attr->revision = soc_rev;
soc_dev = soc_device_register(soc_dev_attr); soc_dev = soc_device_register(soc_dev_attr);
if (IS_ERR_OR_NULL(soc_dev)) { if (IS_ERR(soc_dev)) {
kfree(soc_dev_attr); kfree(soc_dev_attr);
return; return;
} }
parent = soc_device_to_device(soc_dev); parent = soc_device_to_device(soc_dev);
if (!IS_ERR_OR_NULL(parent)) device_create_file(parent, &omap_soc_attr);
device_create_file(parent, &omap_soc_attr);
} }
#endif /* CONFIG_SOC_BUS */ #endif /* CONFIG_SOC_BUS */
...@@ -393,6 +393,10 @@ ...@@ -393,6 +393,10 @@
#define OMAP3_CONTROL_PADCONF_SAD2D_SWAKEUP_OFFSET 0xa1c #define OMAP3_CONTROL_PADCONF_SAD2D_SWAKEUP_OFFSET 0xa1c
#define OMAP3_CONTROL_PADCONF_JTAG_RTCK_OFFSET 0xa1e #define OMAP3_CONTROL_PADCONF_JTAG_RTCK_OFFSET 0xa1e
#define OMAP3_CONTROL_PADCONF_JTAG_TDO_OFFSET 0xa20 #define OMAP3_CONTROL_PADCONF_JTAG_TDO_OFFSET 0xa20
#define OMAP3_CONTROL_PADCONF_GPIO_127 0xa24
#define OMAP3_CONTROL_PADCONF_GPIO_126 0xa26
#define OMAP3_CONTROL_PADCONF_GPIO_128 0xa28
#define OMAP3_CONTROL_PADCONF_GPIO_129 0xa2a
#define OMAP3_CONTROL_PADCONF_MUX_SIZE \ #define OMAP3_CONTROL_PADCONF_MUX_SIZE \
(OMAP3_CONTROL_PADCONF_JTAG_TDO_OFFSET + 0x2) (OMAP3_CONTROL_PADCONF_GPIO_129 + 0x2)
...@@ -876,4 +876,4 @@ static int __init omap_device_late_init(void) ...@@ -876,4 +876,4 @@ static int __init omap_device_late_init(void)
bus_for_each_dev(&platform_bus_type, NULL, NULL, omap_device_late_idle); bus_for_each_dev(&platform_bus_type, NULL, NULL, omap_device_late_idle);
return 0; return 0;
} }
omap_late_initcall(omap_device_late_init); omap_late_initcall_sync(omap_device_late_init);
...@@ -396,6 +396,7 @@ IS_OMAP_TYPE(3430, 0x3430) ...@@ -396,6 +396,7 @@ IS_OMAP_TYPE(3430, 0x3430)
#define AM335X_CLASS 0x33500033 #define AM335X_CLASS 0x33500033
#define AM335X_REV_ES1_0 AM335X_CLASS #define AM335X_REV_ES1_0 AM335X_CLASS
#define AM335X_REV_ES2_0 (AM335X_CLASS | (0x1 << 8)) #define AM335X_REV_ES2_0 (AM335X_CLASS | (0x1 << 8))
#define AM335X_REV_ES2_1 (AM335X_CLASS | (0x2 << 8))
#define OMAP443X_CLASS 0x44300044 #define OMAP443X_CLASS 0x44300044
#define OMAP4430_REV_ES1_0 (OMAP443X_CLASS | (0x10 << 8)) #define OMAP4430_REV_ES1_0 (OMAP443X_CLASS | (0x10 << 8))
...@@ -496,6 +497,7 @@ level(__##fn); ...@@ -496,6 +497,7 @@ level(__##fn);
#define omap_subsys_initcall(fn) omap_initcall(subsys_initcall, fn) #define omap_subsys_initcall(fn) omap_initcall(subsys_initcall, fn)
#define omap_device_initcall(fn) omap_initcall(device_initcall, fn) #define omap_device_initcall(fn) omap_initcall(device_initcall, fn)
#define omap_late_initcall(fn) omap_initcall(late_initcall, fn) #define omap_late_initcall(fn) omap_initcall(late_initcall, fn)
#define omap_late_initcall_sync(fn) omap_initcall(late_initcall_sync, fn)
#endif /* __ASSEMBLY__ */ #endif /* __ASSEMBLY__ */
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