Lines Matching refs:isc

49 #include "atmel-isc-regs.h"
50 #include "atmel-isc.h"
197 static void isc_sama5d2_config_csc(struct isc_device *isc)
199 struct regmap *regmap = isc->regmap;
202 regmap_write(regmap, ISC_CSC_YR_YG + isc->offsets.csc,
204 regmap_write(regmap, ISC_CSC_YB_OY + isc->offsets.csc,
206 regmap_write(regmap, ISC_CSC_CBR_CBG + isc->offsets.csc,
208 regmap_write(regmap, ISC_CSC_CBB_OCB + isc->offsets.csc,
210 regmap_write(regmap, ISC_CSC_CRR_CRG + isc->offsets.csc,
212 regmap_write(regmap, ISC_CSC_CRB_OCR + isc->offsets.csc,
216 static void isc_sama5d2_config_cbc(struct isc_device *isc)
218 struct regmap *regmap = isc->regmap;
220 regmap_write(regmap, ISC_CBC_BRIGHT + isc->offsets.cbc,
221 isc->ctrls.brightness);
222 regmap_write(regmap, ISC_CBC_CONTRAST + isc->offsets.cbc,
223 isc->ctrls.contrast);
226 static void isc_sama5d2_config_cc(struct isc_device *isc)
228 struct regmap *regmap = isc->regmap;
239 static void isc_sama5d2_config_ctrls(struct isc_device *isc,
242 struct isc_ctrls *ctrls = &isc->ctrls;
250 static void isc_sama5d2_config_dpc(struct isc_device *isc)
255 static void isc_sama5d2_config_gam(struct isc_device *isc)
260 static void isc_sama5d2_config_rlp(struct isc_device *isc)
262 struct regmap *regmap = isc->regmap;
263 u32 rlp_mode = isc->config.rlp_cfg_mode;
282 regmap_update_bits(regmap, ISC_RLP_CFG + isc->offsets.rlp,
286 static void isc_sama5d2_adapt_pipeline(struct isc_device *isc)
288 isc->try_config.bits_pipeline &= ISC_SAMA5D2_PIPELINE;
333 static int isc_parse_dt(struct device *dev, struct isc_device *isc)
341 INIT_LIST_HEAD(&isc->subdev_entities);
381 list_add_tail(&subdev_entity->list, &isc->subdev_entities);
391 struct isc_device *isc;
398 isc = devm_kzalloc(dev, sizeof(*isc), GFP_KERNEL);
399 if (!isc)
402 platform_set_drvdata(pdev, isc);
403 isc->dev = dev;
409 isc->regmap = devm_regmap_init_mmio(dev, io_base, &atmel_isc_regmap_config);
410 if (IS_ERR(isc->regmap)) {
411 ret = PTR_ERR(isc->regmap);
421 "atmel-sama5d2-isc", isc);
428 isc->gamma_table = isc_sama5d2_gamma_table;
429 isc->gamma_max = 2;
431 isc->max_width = ISC_SAMA5D2_MAX_SUPPORT_WIDTH;
432 isc->max_height = ISC_SAMA5D2_MAX_SUPPORT_HEIGHT;
434 isc->config_dpc = isc_sama5d2_config_dpc;
435 isc->config_csc = isc_sama5d2_config_csc;
436 isc->config_cbc = isc_sama5d2_config_cbc;
437 isc->config_cc = isc_sama5d2_config_cc;
438 isc->config_gam = isc_sama5d2_config_gam;
439 isc->config_rlp = isc_sama5d2_config_rlp;
440 isc->config_ctrls = isc_sama5d2_config_ctrls;
442 isc->adapt_pipeline = isc_sama5d2_adapt_pipeline;
444 isc->offsets.csc = ISC_SAMA5D2_CSC_OFFSET;
445 isc->offsets.cbc = ISC_SAMA5D2_CBC_OFFSET;
446 isc->offsets.sub422 = ISC_SAMA5D2_SUB422_OFFSET;
447 isc->offsets.sub420 = ISC_SAMA5D2_SUB420_OFFSET;
448 isc->offsets.rlp = ISC_SAMA5D2_RLP_OFFSET;
449 isc->offsets.his = ISC_SAMA5D2_HIS_OFFSET;
450 isc->offsets.dma = ISC_SAMA5D2_DMA_OFFSET;
451 isc->offsets.version = ISC_SAMA5D2_VERSION_OFFSET;
452 isc->offsets.his_entry = ISC_SAMA5D2_HIS_ENTRY_OFFSET;
454 isc->controller_formats = sama5d2_controller_formats;
455 isc->controller_formats_size = ARRAY_SIZE(sama5d2_controller_formats);
456 isc->formats_list = sama5d2_formats_list;
457 isc->formats_list_size = ARRAY_SIZE(sama5d2_formats_list);
459 /* sama5d2-isc - 8 bits per beat */
460 isc->dcfg = ISC_DCFG_YMBSIZE_BEATS8 | ISC_DCFG_CMBSIZE_BEATS8;
462 /* sama5d2-isc : ISPCK is required and mandatory */
463 isc->ispck_required = true;
465 ret = atmel_isc_pipeline_init(isc);
469 isc->hclock = devm_clk_get(dev, "hclock");
470 if (IS_ERR(isc->hclock)) {
471 ret = PTR_ERR(isc->hclock);
476 ret = clk_prepare_enable(isc->hclock);
482 ret = atmel_isc_clk_init(isc);
484 dev_err(dev, "failed to init isc clock: %d\n", ret);
487 ret = v4l2_device_register(dev, &isc->v4l2_dev);
493 ret = isc_parse_dt(dev, isc);
499 if (list_empty(&isc->subdev_entities)) {
505 list_for_each_entry(subdev_entity, &isc->subdev_entities, list) {
510 v4l2_async_nf_init(&subdev_entity->notifier, &isc->v4l2_dev);
532 if (video_is_registered(&isc->video_dev))
540 isc->ispck = isc->isc_clks[ISC_ISPCK].clk;
542 ret = clk_prepare_enable(isc->ispck);
549 ret = clk_set_rate(isc->ispck, clk_get_rate(isc->hclock));
555 regmap_read(isc->regmap, ISC_VERSION + isc->offsets.version, &ver);
561 clk_disable_unprepare(isc->ispck);
567 atmel_isc_subdev_cleanup(isc);
570 v4l2_device_unregister(&isc->v4l2_dev);
573 clk_disable_unprepare(isc->hclock);
575 atmel_isc_clk_cleanup(isc);
582 struct isc_device *isc = platform_get_drvdata(pdev);
586 atmel_isc_subdev_cleanup(isc);
588 v4l2_device_unregister(&isc->v4l2_dev);
590 clk_disable_unprepare(isc->ispck);
591 clk_disable_unprepare(isc->hclock);
593 atmel_isc_clk_cleanup(isc);
598 struct isc_device *isc = dev_get_drvdata(dev);
600 clk_disable_unprepare(isc->ispck);
601 clk_disable_unprepare(isc->hclock);
608 struct isc_device *isc = dev_get_drvdata(dev);
611 ret = clk_prepare_enable(isc->hclock);
615 ret = clk_prepare_enable(isc->ispck);
617 clk_disable_unprepare(isc->hclock);
628 { .compatible = "atmel,sama5d2-isc" },
638 .name = "atmel-sama5d2-isc",