summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/memory/omap-gpmc.c21
-rw-r--r--include/linux/omap-gpmc.h35
2 files changed, 54 insertions, 2 deletions
diff --git a/drivers/memory/omap-gpmc.c b/drivers/memory/omap-gpmc.c
index 21825ddce4a3..0b62afd86f7e 100644
--- a/drivers/memory/omap-gpmc.c
+++ b/drivers/memory/omap-gpmc.c
@@ -1118,6 +1118,27 @@ void gpmc_update_nand_reg(struct gpmc_nand_regs *reg, int cs)
1118 } 1118 }
1119} 1119}
1120 1120
1121static struct gpmc_nand_ops nand_ops;
1122
1123/**
1124 * gpmc_omap_get_nand_ops - Get the GPMC NAND interface
1125 * @regs: the GPMC NAND register map exclusive for NAND use.
1126 * @cs: GPMC chip select number on which the NAND sits. The
1127 * register map returned will be specific to this chip select.
1128 *
1129 * Returns NULL on error e.g. invalid cs.
1130 */
1131struct gpmc_nand_ops *gpmc_omap_get_nand_ops(struct gpmc_nand_regs *reg, int cs)
1132{
1133 if (cs >= gpmc_cs_num)
1134 return NULL;
1135
1136 gpmc_update_nand_reg(reg, cs);
1137
1138 return &nand_ops;
1139}
1140EXPORT_SYMBOL_GPL(gpmc_omap_get_nand_ops);
1141
1121int gpmc_get_client_irq(unsigned irq_config) 1142int gpmc_get_client_irq(unsigned irq_config)
1122{ 1143{
1123 int i; 1144 int i;
diff --git a/include/linux/omap-gpmc.h b/include/linux/omap-gpmc.h
index 2dcef1c8c8d4..dc2ada6fb9b4 100644
--- a/include/linux/omap-gpmc.h
+++ b/include/linux/omap-gpmc.h
@@ -14,14 +14,45 @@
14#define GPMC_IRQ_FIFOEVENTENABLE 0x01 14#define GPMC_IRQ_FIFOEVENTENABLE 0x01
15#define GPMC_IRQ_COUNT_EVENT 0x02 15#define GPMC_IRQ_COUNT_EVENT 0x02
16 16
17/**
18 * gpmc_nand_ops - Interface between NAND and GPMC
19 * @nand_write_buffer_empty: get the NAND write buffer empty status.
20 */
21struct gpmc_nand_ops {
22 bool (*nand_writebuffer_empty)(void);
23};
24
25struct gpmc_nand_regs;
26
27#if IS_ENABLED(CONFIG_OMAP_GPMC)
28struct gpmc_nand_ops *gpmc_omap_get_nand_ops(struct gpmc_nand_regs *regs,
29 int cs);
30#else
31static inline gpmc_nand_ops *gpmc_omap_get_nand_ops(struct gpmc_nand_regs *regs,
32 int cs)
33{
34 return NULL;
35}
36#endif /* CONFIG_OMAP_GPMC */
37
38/*--------------------------------*/
39
40/* deprecated APIs */
41#if IS_ENABLED(CONFIG_OMAP_GPMC)
42void gpmc_update_nand_reg(struct gpmc_nand_regs *reg, int cs);
43#else
44static inline void gpmc_update_nand_reg(struct gpmc_nand_regs *reg, int cs)
45{
46}
47#endif /* CONFIG_OMAP_GPMC */
48/*--------------------------------*/
49
17extern int gpmc_calc_timings(struct gpmc_timings *gpmc_t, 50extern int gpmc_calc_timings(struct gpmc_timings *gpmc_t,
18 struct gpmc_settings *gpmc_s, 51 struct gpmc_settings *gpmc_s,
19 struct gpmc_device_timings *dev_t); 52 struct gpmc_device_timings *dev_t);
20 53
21struct gpmc_nand_regs;
22struct device_node; 54struct device_node;
23 55
24extern void gpmc_update_nand_reg(struct gpmc_nand_regs *reg, int cs);
25extern int gpmc_get_client_irq(unsigned irq_config); 56extern int gpmc_get_client_irq(unsigned irq_config);
26 57
27extern unsigned int gpmc_ticks_to_ns(unsigned int ticks); 58extern unsigned int gpmc_ticks_to_ns(unsigned int ticks);