Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 355443
b: refs/heads/master
c: 75d3625
h: refs/heads/master
i:
  355441: b910f93
  355439: 17f02d2
v: v3
  • Loading branch information
Ezequiel Garcia authored and Tony Lindgren committed Feb 1, 2013
1 parent 7bb3e26 commit 0a91ec3
Show file tree
Hide file tree
Showing 3 changed files with 89 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: faf5d2ff82154b3e2d30c9bfdab2ea4e089b24d5
refs/heads/master: 75d3625e0e86b2d8d77b4e9c6f685fd7ea0d5a96
43 changes: 43 additions & 0 deletions trunk/Documentation/devicetree/bindings/mtd/gpmc-onenand.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
Device tree bindings for GPMC connected OneNANDs

GPMC connected OneNAND (found on OMAP boards) are represented as child nodes of
the GPMC controller with a name of "onenand".

All timing relevant properties as well as generic gpmc child properties are
explained in a separate documents - please refer to
Documentation/devicetree/bindings/bus/ti-gpmc.txt

Required properties:

- reg: The CS line the peripheral is connected to

Optional properties:

- dma-channel: DMA Channel index

For inline partiton table parsing (optional):

- #address-cells: should be set to 1
- #size-cells: should be set to 1

Example for an OMAP3430 board:

gpmc: gpmc@6e000000 {
compatible = "ti,omap3430-gpmc";
ti,hwmods = "gpmc";
reg = <0x6e000000 0x1000000>;
interrupts = <20>;
gpmc,num-cs = <8>;
gpmc,num-waitpins = <4>;
#address-cells = <2>;
#size-cells = <1>;

onenand@0 {
reg = <0 0 0>; /* CS0, offset 0 */

#address-cells = <1>;
#size-cells = <1>;

/* partitions go here */
};
};
45 changes: 45 additions & 0 deletions trunk/arch/arm/mach-omap2/gpmc.c
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
#include "omap_device.h"
#include "gpmc.h"
#include "gpmc-nand.h"
#include "gpmc-onenand.h"

#define DEVICE_NAME "omap-gpmc"

Expand Down Expand Up @@ -1263,6 +1264,43 @@ static int gpmc_probe_nand_child(struct platform_device *pdev,
}
#endif

#ifdef CONFIG_MTD_ONENAND
static int gpmc_probe_onenand_child(struct platform_device *pdev,
struct device_node *child)
{
u32 val;
struct omap_onenand_platform_data *gpmc_onenand_data;

if (of_property_read_u32(child, "reg", &val) < 0) {
dev_err(&pdev->dev, "%s has no 'reg' property\n",
child->full_name);
return -ENODEV;
}

gpmc_onenand_data = devm_kzalloc(&pdev->dev, sizeof(*gpmc_onenand_data),
GFP_KERNEL);
if (!gpmc_onenand_data)
return -ENOMEM;

gpmc_onenand_data->cs = val;
gpmc_onenand_data->of_node = child;
gpmc_onenand_data->dma_channel = -1;

if (!of_property_read_u32(child, "dma-channel", &val))
gpmc_onenand_data->dma_channel = val;

gpmc_onenand_init(gpmc_onenand_data);

return 0;
}
#else
static int gpmc_probe_onenand_child(struct platform_device *pdev,
struct device_node *child)
{
return 0;
}
#endif

static int gpmc_probe_dt(struct platform_device *pdev)
{
int ret;
Expand All @@ -1281,6 +1319,13 @@ static int gpmc_probe_dt(struct platform_device *pdev)
}
}

for_each_node_by_name(child, "onenand") {
ret = gpmc_probe_onenand_child(pdev, child);
if (ret < 0) {
of_node_put(child);
return ret;
}
}
return 0;
}
#else
Expand Down

0 comments on commit 0a91ec3

Please sign in to comment.