Lines Matching refs:sdev

76 void sdo_write_mask(struct sdo_device *sdev, u32 reg_id, u32 value, u32 mask)
78 u32 old = readl(sdev->regs + reg_id);
80 writel(value, sdev->regs + reg_id);
84 void sdo_write(struct sdo_device *sdev, u32 reg_id, u32 value)
86 writel(value, sdev->regs + reg_id);
90 u32 sdo_read(struct sdo_device *sdev, u32 reg_id)
92 return readl(sdev->regs + reg_id);
97 struct sdo_device *sdev = dev_data;
100 sdo_write_mask(sdev, SDO_IRQ, ~0, SDO_VSYNC_IRQ_PEND);
104 static void sdo_reg_debug(struct sdo_device *sdev)
107 dev_info(sdev->dev, #reg_id " = %08x\n", \
108 sdo_read(sdev, reg_id))
148 struct sdo_device *sdev = sd_to_sdev(sd);
153 sdev->fmt = fmt;
166 struct sdo_device *sdev = sd_to_sdev(sd);
168 if (!sdev->fmt)
172 fmt->height = sdev->fmt->height;
181 struct sdo_device *sdev = sd_to_sdev(sd);
182 struct device *dev = sdev->dev;
196 static int sdo_streamon(struct sdo_device *sdev)
201 sdev->vpll_rate = clk_get_rate(sdev->fout_vpll);
202 ret = clk_set_rate(sdev->fout_vpll, 54000000);
204 dev_err(sdev->dev, "Failed to set vpll rate\n");
207 dev_info(sdev->dev, "fout_vpll.rate = %lu\n",
208 clk_get_rate(sdev->fout_vpll));
210 sdo_write_mask(sdev, SDO_CLKCON, ~0, SDO_TVOUT_CLOCK_ON);
211 ret = clk_prepare_enable(sdev->dacphy);
213 dev_err(sdev->dev, "clk_prepare_enable(dacphy) failed\n");
217 sdo_write_mask(sdev, SDO_DAC, ~0, SDO_POWER_ON_DAC);
218 sdo_reg_debug(sdev);
222 sdo_write_mask(sdev, SDO_CLKCON, 0, SDO_TVOUT_CLOCK_ON);
223 clk_set_rate(sdev->fout_vpll, sdev->vpll_rate);
227 static int sdo_streamoff(struct sdo_device *sdev)
231 sdo_write_mask(sdev, SDO_DAC, 0, SDO_POWER_ON_DAC);
232 clk_disable_unprepare(sdev->dacphy);
233 sdo_write_mask(sdev, SDO_CLKCON, 0, SDO_TVOUT_CLOCK_ON);
235 if (sdo_read(sdev, SDO_CLKCON) & SDO_TVOUT_CLOCK_READY)
240 dev_err(sdev->dev, "failed to stop streaming\n");
241 clk_set_rate(sdev->fout_vpll, sdev->vpll_rate);
247 struct sdo_device *sdev = sd_to_sdev(sd);
248 return on ? sdo_streamon(sdev) : sdo_streamoff(sdev);
271 struct sdo_device *sdev = sd_to_sdev(sd);
274 regulator_disable(sdev->vdet);
275 regulator_disable(sdev->vdac);
276 clk_disable_unprepare(sdev->sclk_dac);
283 struct sdo_device *sdev = sd_to_sdev(sd);
288 ret = clk_prepare_enable(sdev->sclk_dac);
292 ret = regulator_enable(sdev->vdac);
296 ret = regulator_enable(sdev->vdet);
301 sdo_write_mask(sdev, SDO_CLKCON, ~0, SDO_TVOUT_SW_RESET);
303 sdo_write_mask(sdev, SDO_CLKCON, 0, SDO_TVOUT_SW_RESET);
306 sdo_write_mask(sdev, SDO_CONFIG, sdev->fmt->cookie, SDO_STANDARD_MASK);
308 sdo_write_mask(sdev, SDO_CONFIG, 0, SDO_PROGRESSIVE);
310 sdo_write_mask(sdev, SDO_VBI, 0, SDO_CVBS_WSS_INS |
313 sdo_write_mask(sdev, SDO_CCCON, ~0, SDO_COMPENSATION_BHS_ADJ_OFF |
315 sdo_reg_debug(sdev);
319 regulator_disable(sdev->vdac);
321 clk_disable_unprepare(sdev->sclk_dac);
333 struct sdo_device *sdev;
339 sdev = devm_kzalloc(&pdev->dev, sizeof(*sdev), GFP_KERNEL);
340 if (!sdev) {
345 sdev->dev = dev;
355 sdev->regs = devm_ioremap(&pdev->dev, res->start, resource_size(res));
356 if (sdev->regs == NULL) {
370 "s5p-sdo", sdev);
375 sdev->irq = res->start;
378 sdev->sclk_dac = clk_get(dev, "sclk_dac");
379 if (IS_ERR(sdev->sclk_dac)) {
381 ret = PTR_ERR(sdev->sclk_dac);
384 sdev->dac = clk_get(dev, "dac");
385 if (IS_ERR(sdev->dac)) {
387 ret = PTR_ERR(sdev->dac);
390 sdev->dacphy = clk_get(dev, "dacphy");
391 if (IS_ERR(sdev->dacphy)) {
393 ret = PTR_ERR(sdev->dacphy);
402 clk_set_parent(sdev->sclk_dac, sclk_vpll);
404 sdev->fout_vpll = clk_get(dev, "fout_vpll");
405 if (IS_ERR(sdev->fout_vpll)) {
407 ret = PTR_ERR(sdev->fout_vpll);
413 sdev->vdac = devm_regulator_get(dev, "vdd33a_dac");
414 if (IS_ERR(sdev->vdac)) {
416 ret = PTR_ERR(sdev->vdac);
419 sdev->vdet = devm_regulator_get(dev, "vdet");
420 if (IS_ERR(sdev->vdet)) {
422 ret = PTR_ERR(sdev->vdet);
427 ret = clk_prepare_enable(sdev->dac);
437 v4l2_subdev_init(&sdev->sd, &sdo_sd_ops);
438 sdev->sd.owner = THIS_MODULE;
439 strlcpy(sdev->sd.name, "s5p-sdo", sizeof(sdev->sd.name));
442 sdev->fmt = sdo_find_format(SDO_DEFAULT_STD);
443 BUG_ON(sdev->fmt == NULL);
446 dev_set_drvdata(dev, &sdev->sd);
452 clk_put(sdev->fout_vpll);
454 clk_put(sdev->dacphy);
456 clk_put(sdev->dac);
458 clk_put(sdev->sclk_dac);
467 struct sdo_device *sdev = sd_to_sdev(sd);
470 clk_disable_unprepare(sdev->dac);
471 clk_put(sdev->fout_vpll);
472 clk_put(sdev->dacphy);
473 clk_put(sdev->dac);
474 clk_put(sdev->sclk_dac);