diff options
-rw-r--r-- | drivers/memory/omap-gpmc.c | 21 | ||||
-rw-r--r-- | include/linux/omap-gpmc.h | 35 |
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 | ||
1121 | static 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 | */ | ||
1131 | struct 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 | } | ||
1140 | EXPORT_SYMBOL_GPL(gpmc_omap_get_nand_ops); | ||
1141 | |||
1121 | int gpmc_get_client_irq(unsigned irq_config) | 1142 | int 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 | */ | ||
21 | struct gpmc_nand_ops { | ||
22 | bool (*nand_writebuffer_empty)(void); | ||
23 | }; | ||
24 | |||
25 | struct gpmc_nand_regs; | ||
26 | |||
27 | #if IS_ENABLED(CONFIG_OMAP_GPMC) | ||
28 | struct gpmc_nand_ops *gpmc_omap_get_nand_ops(struct gpmc_nand_regs *regs, | ||
29 | int cs); | ||
30 | #else | ||
31 | static 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) | ||
42 | void gpmc_update_nand_reg(struct gpmc_nand_regs *reg, int cs); | ||
43 | #else | ||
44 | static inline void gpmc_update_nand_reg(struct gpmc_nand_regs *reg, int cs) | ||
45 | { | ||
46 | } | ||
47 | #endif /* CONFIG_OMAP_GPMC */ | ||
48 | /*--------------------------------*/ | ||
49 | |||
17 | extern int gpmc_calc_timings(struct gpmc_timings *gpmc_t, | 50 | extern 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 | ||
21 | struct gpmc_nand_regs; | ||
22 | struct device_node; | 54 | struct device_node; |
23 | 55 | ||
24 | extern void gpmc_update_nand_reg(struct gpmc_nand_regs *reg, int cs); | ||
25 | extern int gpmc_get_client_irq(unsigned irq_config); | 56 | extern int gpmc_get_client_irq(unsigned irq_config); |
26 | 57 | ||
27 | extern unsigned int gpmc_ticks_to_ns(unsigned int ticks); | 58 | extern unsigned int gpmc_ticks_to_ns(unsigned int ticks); |