diff options
Diffstat (limited to 'arch/arm')
-rw-r--r-- | arch/arm/mach-omap2/gpmc.c | 40 | ||||
-rw-r--r-- | arch/arm/mach-omap2/gpmc.h | 2 |
2 files changed, 42 insertions, 0 deletions
diff --git a/arch/arm/mach-omap2/gpmc.c b/arch/arm/mach-omap2/gpmc.c index b22771b4d9f2..85231b3a217e 100644 --- a/arch/arm/mach-omap2/gpmc.c +++ b/arch/arm/mach-omap2/gpmc.c | |||
@@ -1187,6 +1187,46 @@ static struct of_device_id gpmc_dt_ids[] = { | |||
1187 | }; | 1187 | }; |
1188 | MODULE_DEVICE_TABLE(of, gpmc_dt_ids); | 1188 | MODULE_DEVICE_TABLE(of, gpmc_dt_ids); |
1189 | 1189 | ||
1190 | /** | ||
1191 | * gpmc_read_settings_dt - read gpmc settings from device-tree | ||
1192 | * @np: pointer to device-tree node for a gpmc child device | ||
1193 | * @p: pointer to gpmc settings structure | ||
1194 | * | ||
1195 | * Reads the GPMC settings for a GPMC child device from device-tree and | ||
1196 | * stores them in the GPMC settings structure passed. The GPMC settings | ||
1197 | * structure is initialised to zero by this function and so any | ||
1198 | * previously stored settings will be cleared. | ||
1199 | */ | ||
1200 | void gpmc_read_settings_dt(struct device_node *np, struct gpmc_settings *p) | ||
1201 | { | ||
1202 | memset(p, 0, sizeof(struct gpmc_settings)); | ||
1203 | |||
1204 | p->sync_read = of_property_read_bool(np, "gpmc,sync-read"); | ||
1205 | p->sync_write = of_property_read_bool(np, "gpmc,sync-write"); | ||
1206 | p->device_nand = of_property_read_bool(np, "gpmc,device-nand"); | ||
1207 | of_property_read_u32(np, "gpmc,device-width", &p->device_width); | ||
1208 | of_property_read_u32(np, "gpmc,mux-add-data", &p->mux_add_data); | ||
1209 | |||
1210 | if (!of_property_read_u32(np, "gpmc,burst-length", &p->burst_len)) { | ||
1211 | p->burst_wrap = of_property_read_bool(np, "gpmc,burst-wrap"); | ||
1212 | p->burst_read = of_property_read_bool(np, "gpmc,burst-read"); | ||
1213 | p->burst_write = of_property_read_bool(np, "gpmc,burst-write"); | ||
1214 | if (!p->burst_read && !p->burst_write) | ||
1215 | pr_warn("%s: page/burst-length set but not used!\n", | ||
1216 | __func__); | ||
1217 | } | ||
1218 | |||
1219 | if (!of_property_read_u32(np, "gpmc,wait-pin", &p->wait_pin)) { | ||
1220 | p->wait_on_read = of_property_read_bool(np, | ||
1221 | "gpmc,wait-on-read"); | ||
1222 | p->wait_on_write = of_property_read_bool(np, | ||
1223 | "gpmc,wait-on-write"); | ||
1224 | if (!p->wait_on_read && !p->wait_on_write) | ||
1225 | pr_warn("%s: read/write wait monitoring not enabled!\n", | ||
1226 | __func__); | ||
1227 | } | ||
1228 | } | ||
1229 | |||
1190 | static void __maybe_unused gpmc_read_timings_dt(struct device_node *np, | 1230 | static void __maybe_unused gpmc_read_timings_dt(struct device_node *np, |
1191 | struct gpmc_timings *gpmc_t) | 1231 | struct gpmc_timings *gpmc_t) |
1192 | { | 1232 | { |
diff --git a/arch/arm/mach-omap2/gpmc.h b/arch/arm/mach-omap2/gpmc.h index 87d2a226a3ba..707f6d58edd5 100644 --- a/arch/arm/mach-omap2/gpmc.h +++ b/arch/arm/mach-omap2/gpmc.h | |||
@@ -225,5 +225,7 @@ extern void gpmc_cs_free(int cs); | |||
225 | extern void omap3_gpmc_save_context(void); | 225 | extern void omap3_gpmc_save_context(void); |
226 | extern void omap3_gpmc_restore_context(void); | 226 | extern void omap3_gpmc_restore_context(void); |
227 | extern int gpmc_configure(int cmd, int wval); | 227 | extern int gpmc_configure(int cmd, int wval); |
228 | extern void gpmc_read_settings_dt(struct device_node *np, | ||
229 | struct gpmc_settings *p); | ||
228 | 230 | ||
229 | #endif | 231 | #endif |