Commit 63fad06a authored by Olof Johansson's avatar Olof Johansson

Merge tag 'gpmc-omap-for-v4.1' of git://github.com/rogerq/linux into next/drivers

Merge "OMAP-GPMC driver fixes for v4.1" from Roger Quandros:

* Fixed WAITMONITORINGTIME programming to be based on
GPMC_CLK instead of GPMC_FCLK. The GPMC clock divider
programming is fixed for both synchronous and asynchronous
modes.
* Allow GPMC's children of default bus type to be populated in
the device tree.
* Improved DEBUG output data and format.
* Prevent writing 1 into reserved bits of GPMC_CONFIG7.

* tag 'gpmc-omap-for-v4.1' of git://github.com/rogerq/linux:
  ARM OMAP2+ GPMC: fix programming/showing reserved timing parameters
  ARM OMAP2+ GPMC: fix WAITMONITORINGTIME divider bug
  ARM OMAP2+ GPMC: calculate GPMCFCLKDIVIDER based on WAITMONITORINGTIME
  ARM OMAP2+ GPMC: always program GPMCFCLKDIVIDER
  ARM OMAP2+ GPMC: change get_gpmc_timing_reg output for DTS
  ARM OMAP2+ GPMC: fix debug output alignment
  ARM OMAP2+ GPMC: add bus children
  ARM OMAP2+ GPMC: don't undef DEBUG
  ARM: OMAP2+: gpmc: make gpmc_cs_get_name() static
  ARM: OMAP2+: gpmc: Fix writing in gpmc_cs_set_memconf
Signed-off-by: default avatarOlof Johansson <olof@lixom.net>
parents aabab880 4b613e9b
...@@ -96,14 +96,6 @@ int gpmc_nand_init(struct omap_nand_platform_data *gpmc_nand_data, ...@@ -96,14 +96,6 @@ int gpmc_nand_init(struct omap_nand_platform_data *gpmc_nand_data,
gpmc_nand_res[1].start = gpmc_get_client_irq(GPMC_IRQ_FIFOEVENTENABLE); gpmc_nand_res[1].start = gpmc_get_client_irq(GPMC_IRQ_FIFOEVENTENABLE);
gpmc_nand_res[2].start = gpmc_get_client_irq(GPMC_IRQ_COUNT_EVENT); gpmc_nand_res[2].start = gpmc_get_client_irq(GPMC_IRQ_COUNT_EVENT);
if (gpmc_t) {
err = gpmc_cs_set_timings(gpmc_nand_data->cs, gpmc_t);
if (err < 0) {
pr_err("omap2-gpmc: Unable to set gpmc timings: %d\n", err);
return err;
}
}
memset(&s, 0, sizeof(struct gpmc_settings)); memset(&s, 0, sizeof(struct gpmc_settings));
if (gpmc_nand_data->of_node) if (gpmc_nand_data->of_node)
gpmc_read_settings_dt(gpmc_nand_data->of_node, &s); gpmc_read_settings_dt(gpmc_nand_data->of_node, &s);
...@@ -111,6 +103,16 @@ int gpmc_nand_init(struct omap_nand_platform_data *gpmc_nand_data, ...@@ -111,6 +103,16 @@ int gpmc_nand_init(struct omap_nand_platform_data *gpmc_nand_data,
gpmc_set_legacy(gpmc_nand_data, &s); gpmc_set_legacy(gpmc_nand_data, &s);
s.device_nand = true; s.device_nand = true;
if (gpmc_t) {
err = gpmc_cs_set_timings(gpmc_nand_data->cs, gpmc_t, &s);
if (err < 0) {
pr_err("omap2-gpmc: Unable to set gpmc timings: %d\n",
err);
return err;
}
}
err = gpmc_cs_program_settings(gpmc_nand_data->cs, &s); err = gpmc_cs_program_settings(gpmc_nand_data->cs, &s);
if (err < 0) if (err < 0)
goto out_free_cs; goto out_free_cs;
......
...@@ -293,7 +293,7 @@ static int omap2_onenand_setup_async(void __iomem *onenand_base) ...@@ -293,7 +293,7 @@ static int omap2_onenand_setup_async(void __iomem *onenand_base)
if (ret < 0) if (ret < 0)
return ret; return ret;
ret = gpmc_cs_set_timings(gpmc_onenand_data->cs, &t); ret = gpmc_cs_set_timings(gpmc_onenand_data->cs, &t, &onenand_async);
if (ret < 0) if (ret < 0)
return ret; return ret;
...@@ -331,7 +331,7 @@ static int omap2_onenand_setup_sync(void __iomem *onenand_base, int *freq_ptr) ...@@ -331,7 +331,7 @@ static int omap2_onenand_setup_sync(void __iomem *onenand_base, int *freq_ptr)
if (ret < 0) if (ret < 0)
return ret; return ret;
ret = gpmc_cs_set_timings(gpmc_onenand_data->cs, &t); ret = gpmc_cs_set_timings(gpmc_onenand_data->cs, &t, &onenand_sync);
if (ret < 0) if (ret < 0)
return ret; return ret;
......
...@@ -71,7 +71,7 @@ static int tusb_set_async_mode(unsigned sysclk_ps) ...@@ -71,7 +71,7 @@ static int tusb_set_async_mode(unsigned sysclk_ps)
gpmc_calc_timings(&t, &tusb_async, &dev_t); gpmc_calc_timings(&t, &tusb_async, &dev_t);
return gpmc_cs_set_timings(async_cs, &t); return gpmc_cs_set_timings(async_cs, &t, &tusb_async);
} }
static int tusb_set_sync_mode(unsigned sysclk_ps) static int tusb_set_sync_mode(unsigned sysclk_ps)
...@@ -98,7 +98,7 @@ static int tusb_set_sync_mode(unsigned sysclk_ps) ...@@ -98,7 +98,7 @@ static int tusb_set_sync_mode(unsigned sysclk_ps)
gpmc_calc_timings(&t, &tusb_sync, &dev_t); gpmc_calc_timings(&t, &tusb_sync, &dev_t);
return gpmc_cs_set_timings(sync_cs, &t); return gpmc_cs_set_timings(sync_cs, &t, &tusb_sync);
} }
/* tusb driver calls this when it changes the chip's clocking */ /* tusb driver calls this when it changes the chip's clocking */
......
This diff is collapsed.
...@@ -163,7 +163,8 @@ extern unsigned int gpmc_ticks_to_ns(unsigned int ticks); ...@@ -163,7 +163,8 @@ extern unsigned int gpmc_ticks_to_ns(unsigned int ticks);
extern void gpmc_cs_write_reg(int cs, int idx, u32 val); extern void gpmc_cs_write_reg(int cs, int idx, u32 val);
extern int gpmc_calc_divider(unsigned int sync_clk); extern int gpmc_calc_divider(unsigned int sync_clk);
extern int gpmc_cs_set_timings(int cs, const struct gpmc_timings *t); extern int gpmc_cs_set_timings(int cs, const struct gpmc_timings *t,
const struct gpmc_settings *s);
extern int gpmc_cs_program_settings(int cs, struct gpmc_settings *p); extern int gpmc_cs_program_settings(int cs, struct gpmc_settings *p);
extern int gpmc_cs_request(int cs, unsigned long size, unsigned long *base); extern int gpmc_cs_request(int cs, unsigned long size, unsigned long *base);
extern void gpmc_cs_free(int cs); extern void gpmc_cs_free(int cs);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment