- value = lcdc_readl(®s->lcdc_lcden);
- lcdc_writel(®s->lcdc_lcden, value | LCDC_LCDEN_CLKEN);
- while (!(lcdc_readl(®s->lcdc_lcdsr) & LCDC_LCDSR_CLKSTS))
- udelay(1);
- value = lcdc_readl(®s->lcdc_lcden);
- lcdc_writel(®s->lcdc_lcden, value | LCDC_LCDEN_SYNCEN);
- while (!(lcdc_readl(®s->lcdc_lcdsr) & LCDC_LCDSR_LCDSTS))
- udelay(1);
- value = lcdc_readl(®s->lcdc_lcden);
- lcdc_writel(®s->lcdc_lcden, value | LCDC_LCDEN_DISPEN);
- while (!(lcdc_readl(®s->lcdc_lcdsr) & LCDC_LCDSR_DISPSTS))
- udelay(1);
- value = lcdc_readl(®s->lcdc_lcden);
- lcdc_writel(®s->lcdc_lcden, value | LCDC_LCDEN_PWMEN);
- while (!(lcdc_readl(®s->lcdc_lcdsr) & LCDC_LCDSR_PWMSTS))
- udelay(1);
+ value = readl(®s->lcdc_lcden);
+ writel(value | LCDC_LCDEN_CLKEN, ®s->lcdc_lcden);
+ ret = wait_for_bit_le32(®s->lcdc_lcdsr, LCDC_LCDSR_CLKSTS,
+ true, 1000, false);
+ if (ret)
+ printf("%s: %d: Timeout!\n", __func__, __LINE__);
+ value = readl(®s->lcdc_lcden);
+ writel(value | LCDC_LCDEN_SYNCEN, ®s->lcdc_lcden);
+ ret = wait_for_bit_le32(®s->lcdc_lcdsr, LCDC_LCDSR_LCDSTS,
+ true, 1000, false);
+ if (ret)
+ printf("%s: %d: Timeout!\n", __func__, __LINE__);
+ value = readl(®s->lcdc_lcden);
+ writel(value | LCDC_LCDEN_DISPEN, ®s->lcdc_lcden);
+ ret = wait_for_bit_le32(®s->lcdc_lcdsr, LCDC_LCDSR_DISPSTS,
+ true, 1000, false);
+ if (ret)
+ printf("%s: %d: Timeout!\n", __func__, __LINE__);
+ value = readl(®s->lcdc_lcden);
+ writel(value | LCDC_LCDEN_PWMEN, ®s->lcdc_lcden);
+ ret = wait_for_bit_le32(®s->lcdc_lcdsr, LCDC_LCDSR_PWMSTS,
+ true, 1000, false);
+ if (ret)
+ printf("%s: %d: Timeout!\n", __func__, __LINE__);
+}
+
+static int atmel_hlcdc_probe(struct udevice *dev)
+{
+ struct video_priv *uc_priv = dev_get_uclass_priv(dev);
+ struct atmel_hlcdc_priv *priv = dev_get_priv(dev);
+ int ret;
+
+ ret = at91_hlcdc_enable_clk(dev);
+ if (ret)
+ return ret;
+
+ atmel_hlcdc_init(dev);
+
+ uc_priv->xsize = priv->timing.hactive.typ;
+ uc_priv->ysize = priv->timing.vactive.typ;
+ uc_priv->bpix = priv->vl_bpix;