mirror of https://gitee.com/openkylin/linux.git
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 -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (GNU/Linux) iQIcBAABAgAGBQJRi9KVAAoJEBvUPslcq6VzjVEP/1M0JZWHIgZc8kpeh+uQQFDy b3r3/n/4O+gF1lTuP4Zz7xRovqlPKAXqvVaqM4BH8IjTeFSRA+jqeIkC7ut2QUi/ tOSx6F7PBtPLBJskEoqm/YpyVPvvIpM3imj04JADzxPKlm9lAoCblf7SvCCMT/ep oaB3tFIisvL++RNBU+Hiiu12yJUk8uccsVsO9engnbKBnwygVR1rGny6yFqMSPdX xcE2EKTZ+oCt0btTqJae8T2OkfxYw1JjPDHLUU4+1lkFq82E1sngRnAWAKktW6ri +s5vpc/+50lB3QM/O0zMpLHco0kvFXtdeI7ifhxpMJYklTeidDrmiV/mvIe8J/Jj Ey1Q+g4GWywqkGm5C8LbiJfmEyVNH6zANldqNm8GrNQxmo8w9sDvXbBr1kgIpHK+ k86Lpdp2pDWp9yGnrMXmghPCnMB0md5ePhAdhmw8YGcOP698w9bSPBViXXpi+X3L 1zTZj82KJUFhvuBxIvO7ZWNSjiZO63HZYiDa1NT6OmzaQO8xI45sO82pMF47Vr9K 6dmNQT0D9BWW5jvQ1W9nUy8S7ysGkI5yvpbGImHz/4P/xF6hO0rsaSMdzYaCXP0N 4DZwuf9+Ebi0oLcH3APvb/wMG8vjJJv9tCLB/uNV4eXIIWA6bBzelmNcWVPd4eVo 2b11r4ESOqxKMpWqJGoK =lnij -----END PGP SIGNATURE----- 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: Olof Johansson <olof@lixom.net>
This commit is contained in:
commit
474dbaa78c
|
@ -56,20 +56,20 @@ Example for an AM33xx board:
|
|||
nand-bus-width = <16>;
|
||||
ti,nand-ecc-opt = "bch8";
|
||||
|
||||
gpmc,sync-clk = <0>;
|
||||
gpmc,cs-on = <0>;
|
||||
gpmc,cs-rd-off = <44>;
|
||||
gpmc,cs-wr-off = <44>;
|
||||
gpmc,adv-on = <6>;
|
||||
gpmc,adv-rd-off = <34>;
|
||||
gpmc,adv-wr-off = <44>;
|
||||
gpmc,we-off = <40>;
|
||||
gpmc,oe-off = <54>;
|
||||
gpmc,access = <64>;
|
||||
gpmc,rd-cycle = <82>;
|
||||
gpmc,wr-cycle = <82>;
|
||||
gpmc,wr-access = <40>;
|
||||
gpmc,wr-data-mux-bus = <0>;
|
||||
gpmc,sync-clk-ps = <0>;
|
||||
gpmc,cs-on-ns = <0>;
|
||||
gpmc,cs-rd-off-ns = <44>;
|
||||
gpmc,cs-wr-off-ns = <44>;
|
||||
gpmc,adv-on-ns = <6>;
|
||||
gpmc,adv-rd-off-ns = <34>;
|
||||
gpmc,adv-wr-off-ns = <44>;
|
||||
gpmc,we-off-ns = <40>;
|
||||
gpmc,oe-off-ns = <54>;
|
||||
gpmc,access-ns = <64>;
|
||||
gpmc,rd-cycle-ns = <82>;
|
||||
gpmc,wr-cycle-ns = <82>;
|
||||
gpmc,wr-access-ns = <40>;
|
||||
gpmc,wr-data-mux-bus-ns = <0>;
|
||||
|
||||
#address-cells = <1>;
|
||||
#size-cells = <1>;
|
||||
|
|
|
@ -26,16 +26,16 @@ Required properties:
|
|||
- 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.
|
||||
- compatible: Compatible string property for the ethernet child device.
|
||||
- gpmc,cs-on: Chip-select assertion time
|
||||
- gpmc,cs-rd-off: Chip-select de-assertion time for reads
|
||||
- gpmc,cs-wr-off: Chip-select de-assertion time for writes
|
||||
- gpmc,oe-on: Output-enable assertion time
|
||||
- gpmc,oe-off Output-enable de-assertion time
|
||||
- gpmc,we-on: Write-enable assertion time
|
||||
- gpmc,we-off: Write-enable de-assertion time
|
||||
- gpmc,access: Start cycle to first data capture (read access)
|
||||
- gpmc,rd-cycle: Total read cycle time
|
||||
- gpmc,wr-cycle: Total write cycle time
|
||||
- gpmc,cs-on-ns: Chip-select assertion time
|
||||
- gpmc,cs-rd-off-ns: Chip-select de-assertion time for reads
|
||||
- gpmc,cs-wr-off-ns: Chip-select de-assertion time for writes
|
||||
- gpmc,oe-on-ns: Output-enable assertion time
|
||||
- gpmc,oe-off-ns: Output-enable de-assertion time
|
||||
- gpmc,we-on-ns: Write-enable assertion time
|
||||
- gpmc,we-off-ns: Write-enable de-assertion time
|
||||
- gpmc,access-ns: Start cycle to first data capture (read access)
|
||||
- gpmc,rd-cycle-ns: Total read cycle time
|
||||
- gpmc,wr-cycle-ns: Total write cycle time
|
||||
- reg: Chip-select, base address (relative to chip-select)
|
||||
and size of the memory mapped for the device.
|
||||
Note that base address will be typically 0 as this
|
||||
|
@ -65,24 +65,24 @@ gpmc: gpmc@6e000000 {
|
|||
bank-width = <2>;
|
||||
|
||||
gpmc,mux-add-data;
|
||||
gpmc,cs-on = <0>;
|
||||
gpmc,cs-rd-off = <186>;
|
||||
gpmc,cs-wr-off = <186>;
|
||||
gpmc,adv-on = <12>;
|
||||
gpmc,adv-rd-off = <48>;
|
||||
gpmc,adv-wr-off = <48>;
|
||||
gpmc,oe-on = <54>;
|
||||
gpmc,oe-off = <168>;
|
||||
gpmc,we-on = <54>;
|
||||
gpmc,we-off = <168>;
|
||||
gpmc,rd-cycle = <186>;
|
||||
gpmc,wr-cycle = <186>;
|
||||
gpmc,access = <114>;
|
||||
gpmc,page-burst-access = <6>;
|
||||
gpmc,bus-turnaround = <12>;
|
||||
gpmc,cycle2cycle-delay = <18>;
|
||||
gpmc,wr-data-mux-bus = <90>;
|
||||
gpmc,wr-access = <186>;
|
||||
gpmc,cs-on-ns = <0>;
|
||||
gpmc,cs-rd-off-ns = <186>;
|
||||
gpmc,cs-wr-off-ns = <186>;
|
||||
gpmc,adv-on-ns = <12>;
|
||||
gpmc,adv-rd-off-ns = <48>;
|
||||
gpmc,adv-wr-off-ns = <48>;
|
||||
gpmc,oe-on-ns = <54>;
|
||||
gpmc,oe-off-ns = <168>;
|
||||
gpmc,we-on-ns = <54>;
|
||||
gpmc,we-off-ns = <168>;
|
||||
gpmc,rd-cycle-ns = <186>;
|
||||
gpmc,wr-cycle-ns = <186>;
|
||||
gpmc,access-ns = <114>;
|
||||
gpmc,page-burst-access-ns = <6>;
|
||||
gpmc,bus-turnaround-ns = <12>;
|
||||
gpmc,cycle2cycle-delay-ns = <18>;
|
||||
gpmc,wr-data-mux-bus-ns = <90>;
|
||||
gpmc,wr-access-ns = <186>;
|
||||
gpmc,cycle2cycle-samecsen;
|
||||
gpmc,cycle2cycle-diffcsen;
|
||||
|
||||
|
|
|
@ -155,6 +155,7 @@ CONFIG_OMAP_WATCHDOG=y
|
|||
CONFIG_TWL4030_WATCHDOG=y
|
||||
CONFIG_MFD_TPS65217=y
|
||||
CONFIG_MFD_TPS65910=y
|
||||
CONFIG_TWL6040_CORE=y
|
||||
CONFIG_REGULATOR_TWL4030=y
|
||||
CONFIG_REGULATOR_TPS65023=y
|
||||
CONFIG_REGULATOR_TPS6507X=y
|
||||
|
@ -197,6 +198,7 @@ CONFIG_SND_USB_AUDIO=m
|
|||
CONFIG_SND_SOC=m
|
||||
CONFIG_SND_OMAP_SOC=m
|
||||
CONFIG_SND_OMAP_SOC_OMAP_TWL4030=m
|
||||
CONFIG_SND_OMAP_SOC_OMAP_ABE_TWL6040=m
|
||||
CONFIG_SND_OMAP_SOC_OMAP3_PANDORA=m
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_DEBUG=y
|
||||
|
|
|
@ -301,7 +301,7 @@ static int __init omap1_system_dma_init(void)
|
|||
if (ret) {
|
||||
dev_err(&pdev->dev, "%s: Unable to add resources for %s%d\n",
|
||||
__func__, pdev->name, pdev->id);
|
||||
goto exit_device_put;
|
||||
goto exit_iounmap;
|
||||
}
|
||||
|
||||
p = kzalloc(sizeof(struct omap_system_dma_plat_info), GFP_KERNEL);
|
||||
|
@ -309,7 +309,7 @@ static int __init omap1_system_dma_init(void)
|
|||
dev_err(&pdev->dev, "%s: Unable to allocate 'p' for %s\n",
|
||||
__func__, pdev->name);
|
||||
ret = -ENOMEM;
|
||||
goto exit_device_del;
|
||||
goto exit_iounmap;
|
||||
}
|
||||
|
||||
d = kzalloc(sizeof(struct omap_dma_dev_attr), GFP_KERNEL);
|
||||
|
@ -402,8 +402,8 @@ static int __init omap1_system_dma_init(void)
|
|||
kfree(d);
|
||||
exit_release_p:
|
||||
kfree(p);
|
||||
exit_device_del:
|
||||
platform_device_del(pdev);
|
||||
exit_iounmap:
|
||||
iounmap(dma_base);
|
||||
exit_device_put:
|
||||
platform_device_put(pdev);
|
||||
|
||||
|
|
|
@ -112,13 +112,13 @@ static u8 omap3_beagle_version;
|
|||
*/
|
||||
static struct {
|
||||
int mmc1_gpio_wp;
|
||||
int usb_pwr_level;
|
||||
bool usb_pwr_level; /* 0 - Active Low, 1 - Active High */
|
||||
int dvi_pd_gpio;
|
||||
int usr_button_gpio;
|
||||
int mmc_caps;
|
||||
} beagle_config = {
|
||||
.mmc1_gpio_wp = -EINVAL,
|
||||
.usb_pwr_level = GPIOF_OUT_INIT_LOW,
|
||||
.usb_pwr_level = 0,
|
||||
.dvi_pd_gpio = -EINVAL,
|
||||
.usr_button_gpio = 4,
|
||||
.mmc_caps = MMC_CAP_4_BIT_DATA | MMC_CAP_8_BIT_DATA,
|
||||
|
@ -178,7 +178,7 @@ static void __init omap3_beagle_init_rev(void)
|
|||
case 0:
|
||||
printk(KERN_INFO "OMAP3 Beagle Rev: xM Ax/Bx\n");
|
||||
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;
|
||||
break;
|
||||
case 2:
|
||||
|
|
|
@ -73,11 +73,11 @@
|
|||
#define LIS302_IRQ1_GPIO 181
|
||||
#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 {
|
||||
RX51_SPI_WL1251,
|
||||
RX51_SPI_MIPID, /* LCD panel */
|
||||
RX51_SPI_TSC2005, /* Touch Controller */
|
||||
RX51_SPI_MIPID, /* LCD panel */
|
||||
};
|
||||
|
||||
static struct wl12xx_platform_data wl1251_pdata;
|
||||
|
|
|
@ -1520,36 +1520,22 @@ static int gpmc_probe_dt(struct platform_device *pdev)
|
|||
return ret;
|
||||
}
|
||||
|
||||
for_each_node_by_name(child, "nand") {
|
||||
ret = gpmc_probe_nand_child(pdev, child);
|
||||
if (ret < 0) {
|
||||
of_node_put(child);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
for_each_child_of_node(pdev->dev.of_node, child) {
|
||||
|
||||
for_each_node_by_name(child, "onenand") {
|
||||
ret = gpmc_probe_onenand_child(pdev, child);
|
||||
if (ret < 0) {
|
||||
of_node_put(child);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
if (!child->name)
|
||||
continue;
|
||||
|
||||
for_each_node_by_name(child, "nor") {
|
||||
ret = gpmc_probe_generic_child(pdev, child);
|
||||
if (ret < 0) {
|
||||
of_node_put(child);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
if (of_node_cmp(child->name, "nand") == 0)
|
||||
ret = gpmc_probe_nand_child(pdev, child);
|
||||
else if (of_node_cmp(child->name, "onenand") == 0)
|
||||
ret = gpmc_probe_onenand_child(pdev, child);
|
||||
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") {
|
||||
ret = gpmc_probe_generic_child(pdev, child);
|
||||
if (ret < 0) {
|
||||
if (WARN(ret < 0, "%s: probing gpmc child %s failed\n",
|
||||
__func__, child->full_name))
|
||||
of_node_put(child);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -419,11 +419,15 @@ void __init omap3xxx_check_revision(void)
|
|||
cpu_rev = "1.0";
|
||||
break;
|
||||
case 1:
|
||||
/* FALLTHROUGH */
|
||||
default:
|
||||
omap_revision = AM335X_REV_ES2_0;
|
||||
cpu_rev = "2.0";
|
||||
break;
|
||||
case 2:
|
||||
/* FALLTHROUGH */
|
||||
default:
|
||||
omap_revision = AM335X_REV_ES2_1;
|
||||
cpu_rev = "2.1";
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case 0xb8f2:
|
||||
|
@ -644,13 +648,12 @@ void __init omap_soc_device_init(void)
|
|||
soc_dev_attr->revision = soc_rev;
|
||||
|
||||
soc_dev = soc_device_register(soc_dev_attr);
|
||||
if (IS_ERR_OR_NULL(soc_dev)) {
|
||||
if (IS_ERR(soc_dev)) {
|
||||
kfree(soc_dev_attr);
|
||||
return;
|
||||
}
|
||||
|
||||
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 */
|
||||
|
|
|
@ -393,6 +393,10 @@
|
|||
#define OMAP3_CONTROL_PADCONF_SAD2D_SWAKEUP_OFFSET 0xa1c
|
||||
#define OMAP3_CONTROL_PADCONF_JTAG_RTCK_OFFSET 0xa1e
|
||||
#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 \
|
||||
(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)
|
|||
bus_for_each_dev(&platform_bus_type, NULL, NULL, omap_device_late_idle);
|
||||
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)
|
|||
#define AM335X_CLASS 0x33500033
|
||||
#define AM335X_REV_ES1_0 AM335X_CLASS
|
||||
#define AM335X_REV_ES2_0 (AM335X_CLASS | (0x1 << 8))
|
||||
#define AM335X_REV_ES2_1 (AM335X_CLASS | (0x2 << 8))
|
||||
|
||||
#define OMAP443X_CLASS 0x44300044
|
||||
#define OMAP4430_REV_ES1_0 (OMAP443X_CLASS | (0x10 << 8))
|
||||
|
@ -496,6 +497,7 @@ level(__##fn);
|
|||
#define omap_subsys_initcall(fn) omap_initcall(subsys_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_sync(fn) omap_initcall(late_initcall_sync, fn)
|
||||
|
||||
#endif /* __ASSEMBLY__ */
|
||||
|
||||
|
|
Loading…
Reference in New Issue