On Wed, Apr 28, 2010 at 9:36 PM, Mike Rapoport <mike@xxxxxxxxxxxxxx> wrote: > Signed-off-by: Mike Rapoport <mike@xxxxxxxxxxxxxx> > --- > arch/arm/mach-omap2/gpmc-nand.c | 19 ++++++++++++++++++- > arch/arm/plat-omap/include/plat/nand.h | 1 + > 2 files changed, 19 insertions(+), 1 deletions(-) > > diff --git a/arch/arm/mach-omap2/gpmc-nand.c b/arch/arm/mach-omap2/gpmc-nand.c > index e57fb29..7c6c027 100644 > --- a/arch/arm/mach-omap2/gpmc-nand.c > +++ b/arch/arm/mach-omap2/gpmc-nand.c > @@ -22,6 +22,7 @@ > #define WR_RD_PIN_MONITORING 0x00600000 > > static struct omap_nand_platform_data *gpmc_nand_data; > +static struct gpmc_timings gpmc_default_timings; > > static struct resource gpmc_nand_resource = { > .flags = IORESOURCE_MEM, > @@ -34,13 +35,24 @@ static struct platform_device gpmc_nand_device = { > .resource = &gpmc_nand_resource, > }; > > +static void gpmc_nand_detect_timings(void) > +{ > + struct gpmc_timings t; > + > + memset(&t, 0, sizeof(t)); > + gpmc_cs_get_timings(gpmc_nand_data->cs, &gpmc_default_timings); > +} > + > static int omap2_nand_gpmc_retime(void) > { > + struct device *dev = &gpmc_nand_device.dev; > struct gpmc_timings t; > int err; > > - if (!gpmc_nand_data->gpmc_t) > + if (!gpmc_nand_data->gpmc_t) { > + dev_warn(dev, "No timings provided, skipping retime\n"); > return 0; > + } > > memset(&t, 0, sizeof(t)); > t.sync_clk = gpmc_round_ns_to_ticks(gpmc_nand_data->gpmc_t->sync_clk); > @@ -112,6 +124,11 @@ int __init gpmc_nand_init(struct omap_nand_platform_data *_nand_data) > return err; > } > > + if (gpmc_nand_data->keep_timings) { > + gpmc_nand_detect_timings(); > + gpmc_nand_data->gpmc_t = &gpmc_default_timings; > + } > + I guess moving this part to omap2_nand_gpmc_retime will be a good idea. As there, once we get old/default timings we can simply skip the rounding part and directly jump to setting the timings. Rest looks fine to me. -- Regards, Vimal Singh -- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html