Hi Mateusz, Generally this patch looks good, but I have some minor nitpicks, that I would like to be fixed. On Wednesday 28 of August 2013 18:13:00 Mateusz Krawczuk wrote: > Restore vpll clock rate if start stream fail or stream is off. > > Signed-off-by: Mateusz Krawczuk <m.krawczuk@xxxxxxxxxxxxxxxxxxx> > --- > drivers/media/platform/s5p-tv/sdo_drv.c | 24 ++++++++++++++++++++++-- > 1 file changed, 22 insertions(+), 2 deletions(-) > > diff --git a/drivers/media/platform/s5p-tv/sdo_drv.c > b/drivers/media/platform/s5p-tv/sdo_drv.c index 0afa90f..9dbdfe6 100644 > --- a/drivers/media/platform/s5p-tv/sdo_drv.c > +++ b/drivers/media/platform/s5p-tv/sdo_drv.c > @@ -55,6 +55,8 @@ struct sdo_device { > struct clk *dacphy; > /** clock for control of VPLL */ > struct clk *fout_vpll; > + /** vpll rate before sdo stream was on */ > + int vpll_rate; Clock frequency should be stored in an unsigned long. (See the return type of clk_get_rate().) > /** regulator for SDO IP power */ > struct regulator *vdac; > /** regulator for SDO plug detection */ > @@ -193,17 +195,34 @@ static int sdo_s_power(struct v4l2_subdev *sd, int > on) > > static int sdo_streamon(struct sdo_device *sdev) > { > + int ret; > + > /* set proper clock for Timing Generator */ > - clk_set_rate(sdev->fout_vpll, 54000000); > + sdev->vpll_rate = clk_get_rate(sdev->fout_vpll); > + ret = clk_set_rate(sdev->fout_vpll, 54000000); > + if (ret < 0) { > + dev_err(sdev->dev, > + "Failed to set vpll rate!\n"); > + return ret; > + } > dev_info(sdev->dev, "fout_vpll.rate = %lu\n", > clk_get_rate(sdev->fout_vpll)); > /* enable clock in SDO */ > sdo_write_mask(sdev, SDO_CLKCON, ~0, SDO_TVOUT_CLOCK_ON); > - clk_enable(sdev->dacphy); > + ret = clk_enable(sdev->dacphy); > + if (ret < 0) { > + dev_err(sdev->dev, > + "clk_enable(dacphy) failed !\n"); > + goto fail; > + } > /* enable DAC */ > sdo_write_mask(sdev, SDO_DAC, ~0, SDO_POWER_ON_DAC); > sdo_reg_debug(sdev); > return 0; nit: Please insert a blank line here. Best regards, Tomasz > +fail: > + sdo_write_mask(sdev, SDO_CLKCON, 0, SDO_TVOUT_CLOCK_ON); > + clk_set_rate(sdev->fout_vpll, sdev->vpll_rate); > + return ret; > } > > static int sdo_streamoff(struct sdo_device *sdev) > @@ -220,6 +239,7 @@ static int sdo_streamoff(struct sdo_device *sdev) > } > if (tries == 0) > dev_err(sdev->dev, "failed to stop streaming\n"); > + clk_set_rate(sdev->fout_vpll, sdev->vpll_rate); > return tries ? 0 : -EIO; > } -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html