Commit 9f833156 authored by Jon Hunter's avatar Jon Hunter

ARM: OMAP2+: Add variable to store number of GPMC waitpins

The GPMC has wait-pin signals that can be assigned to a chip-select
to monitor the ready signal of an external device. Add a variable to
indicate the total number of wait-pins for a given device. This will
allow us to detect if the wait-pin being selected is valid or not.

When booting with device-tree read the number of wait-pins from the
device-tree blob. When device-tree is not used set the number of
wait-pins to 4 which is valid for OMAP2-5 devices. Newer devices
that have less wait-pins (such as AM335x) only support booting with
device-tree and so hard-coding the wait-pin number when not using
device-tree is fine.
Signed-off-by: default avatarJon Hunter <jon-hunter@ti.com>
Tested-by: default avatarEzequiel Garcia <ezequiel.garcia@free-electrons.com>
parent be9f10c0
...@@ -108,6 +108,8 @@ ...@@ -108,6 +108,8 @@
#define GPMC_HAS_WR_ACCESS 0x1 #define GPMC_HAS_WR_ACCESS 0x1
#define GPMC_HAS_WR_DATA_MUX_BUS 0x2 #define GPMC_HAS_WR_DATA_MUX_BUS 0x2
#define GPMC_NR_WAITPINS 4
/* XXX: Only NAND irq has been considered,currently these are the only ones used /* XXX: Only NAND irq has been considered,currently these are the only ones used
*/ */
#define GPMC_NR_IRQ 2 #define GPMC_NR_IRQ 2
...@@ -153,6 +155,7 @@ static struct resource gpmc_cs_mem[GPMC_CS_NUM]; ...@@ -153,6 +155,7 @@ static struct resource gpmc_cs_mem[GPMC_CS_NUM];
static DEFINE_SPINLOCK(gpmc_mem_lock); static DEFINE_SPINLOCK(gpmc_mem_lock);
/* Define chip-selects as reserved by default until probe completes */ /* Define chip-selects as reserved by default until probe completes */
static unsigned int gpmc_cs_map = ((1 << GPMC_CS_NUM) - 1); static unsigned int gpmc_cs_map = ((1 << GPMC_CS_NUM) - 1);
static unsigned int gpmc_nr_waitpins;
static struct device *gpmc_dev; static struct device *gpmc_dev;
static int gpmc_irq; static int gpmc_irq;
static resource_size_t phys_base, mem_size; static resource_size_t phys_base, mem_size;
...@@ -1294,6 +1297,13 @@ static int gpmc_probe_dt(struct platform_device *pdev) ...@@ -1294,6 +1297,13 @@ static int gpmc_probe_dt(struct platform_device *pdev)
if (!of_id) if (!of_id)
return 0; return 0;
ret = of_property_read_u32(pdev->dev.of_node, "gpmc,num-waitpins",
&gpmc_nr_waitpins);
if (ret < 0) {
pr_err("%s: number of wait pins not found!\n", __func__);
return ret;
}
for_each_node_by_name(child, "nand") { for_each_node_by_name(child, "nand") {
ret = gpmc_probe_nand_child(pdev, child); ret = gpmc_probe_nand_child(pdev, child);
if (ret < 0) { if (ret < 0) {
...@@ -1372,6 +1382,9 @@ static int gpmc_probe(struct platform_device *pdev) ...@@ -1372,6 +1382,9 @@ static int gpmc_probe(struct platform_device *pdev)
/* Now the GPMC is initialised, unreserve the chip-selects */ /* Now the GPMC is initialised, unreserve the chip-selects */
gpmc_cs_map = 0; gpmc_cs_map = 0;
if (!pdev->dev.of_node)
gpmc_nr_waitpins = GPMC_NR_WAITPINS;
rc = gpmc_probe_dt(pdev); rc = gpmc_probe_dt(pdev);
if (rc < 0) { if (rc < 0) {
clk_disable_unprepare(gpmc_l3_clk); clk_disable_unprepare(gpmc_l3_clk);
......
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