|
@@ -2299,29 +2299,20 @@ static int marvell_nand_chip_init(struct device *dev, struct marvell_nfc *nfc,
|
|
|
/*
|
|
|
* The legacy "num-cs" property indicates the number of CS on the only
|
|
|
* chip connected to the controller (legacy bindings does not support
|
|
|
- * more than one chip). CS are only incremented one by one while the RB
|
|
|
- * pin is always the #0.
|
|
|
+ * more than one chip). The CS and RB pins are always the #0.
|
|
|
*
|
|
|
* When not using legacy bindings, a couple of "reg" and "nand-rb"
|
|
|
* properties must be filled. For each chip, expressed as a subnode,
|
|
|
* "reg" points to the CS lines and "nand-rb" to the RB line.
|
|
|
*/
|
|
|
- if (pdata) {
|
|
|
+ if (pdata || nfc->caps->legacy_of_bindings) {
|
|
|
nsels = 1;
|
|
|
- } else if (nfc->caps->legacy_of_bindings &&
|
|
|
- !of_get_property(np, "num-cs", &nsels)) {
|
|
|
- dev_err(dev, "missing num-cs property\n");
|
|
|
- return -EINVAL;
|
|
|
- } else if (!of_get_property(np, "reg", &nsels)) {
|
|
|
- dev_err(dev, "missing reg property\n");
|
|
|
- return -EINVAL;
|
|
|
- }
|
|
|
-
|
|
|
- if (!pdata)
|
|
|
- nsels /= sizeof(u32);
|
|
|
- if (!nsels) {
|
|
|
- dev_err(dev, "invalid reg property size\n");
|
|
|
- return -EINVAL;
|
|
|
+ } else {
|
|
|
+ nsels = of_property_count_elems_of_size(np, "reg", sizeof(u32));
|
|
|
+ if (nsels <= 0) {
|
|
|
+ dev_err(dev, "missing/invalid reg property\n");
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
/* Alloc the nand chip structure */
|