Lines Matching refs:isc

49 #include "microchip-isc-regs.h"
50 #include "microchip-isc.h"
217 static void isc_sama5d2_config_csc(struct isc_device *isc)
219 struct regmap *regmap = isc->regmap;
222 regmap_write(regmap, ISC_CSC_YR_YG + isc->offsets.csc,
224 regmap_write(regmap, ISC_CSC_YB_OY + isc->offsets.csc,
226 regmap_write(regmap, ISC_CSC_CBR_CBG + isc->offsets.csc,
228 regmap_write(regmap, ISC_CSC_CBB_OCB + isc->offsets.csc,
230 regmap_write(regmap, ISC_CSC_CRR_CRG + isc->offsets.csc,
232 regmap_write(regmap, ISC_CSC_CRB_OCR + isc->offsets.csc,
236 static void isc_sama5d2_config_cbc(struct isc_device *isc)
238 struct regmap *regmap = isc->regmap;
240 regmap_write(regmap, ISC_CBC_BRIGHT + isc->offsets.cbc,
241 isc->ctrls.brightness);
242 regmap_write(regmap, ISC_CBC_CONTRAST + isc->offsets.cbc,
243 isc->ctrls.contrast);
246 static void isc_sama5d2_config_cc(struct isc_device *isc)
248 struct regmap *regmap = isc->regmap;
259 static void isc_sama5d2_config_ctrls(struct isc_device *isc,
262 struct isc_ctrls *ctrls = &isc->ctrls;
270 static void isc_sama5d2_config_dpc(struct isc_device *isc)
275 static void isc_sama5d2_config_gam(struct isc_device *isc)
280 static void isc_sama5d2_config_rlp(struct isc_device *isc)
282 struct regmap *regmap = isc->regmap;
283 u32 rlp_mode = isc->config.rlp_cfg_mode;
302 regmap_update_bits(regmap, ISC_RLP_CFG + isc->offsets.rlp,
306 static void isc_sama5d2_adapt_pipeline(struct isc_device *isc)
308 isc->try_config.bits_pipeline &= ISC_SAMA5D2_PIPELINE;
353 static int isc_parse_dt(struct device *dev, struct isc_device *isc)
361 INIT_LIST_HEAD(&isc->subdev_entities);
401 list_add_tail(&subdev_entity->list, &isc->subdev_entities);
411 struct isc_device *isc;
418 isc = devm_kzalloc(dev, sizeof(*isc), GFP_KERNEL);
419 if (!isc)
422 platform_set_drvdata(pdev, isc);
423 isc->dev = dev;
429 isc->regmap = devm_regmap_init_mmio(dev, io_base, &microchip_isc_regmap_config);
430 if (IS_ERR(isc->regmap)) {
431 ret = PTR_ERR(isc->regmap);
441 "microchip-sama5d2-isc", isc);
448 isc->gamma_table = isc_sama5d2_gamma_table;
449 isc->gamma_max = 2;
451 isc->max_width = ISC_SAMA5D2_MAX_SUPPORT_WIDTH;
452 isc->max_height = ISC_SAMA5D2_MAX_SUPPORT_HEIGHT;
454 isc->config_dpc = isc_sama5d2_config_dpc;
455 isc->config_csc = isc_sama5d2_config_csc;
456 isc->config_cbc = isc_sama5d2_config_cbc;
457 isc->config_cc = isc_sama5d2_config_cc;
458 isc->config_gam = isc_sama5d2_config_gam;
459 isc->config_rlp = isc_sama5d2_config_rlp;
460 isc->config_ctrls = isc_sama5d2_config_ctrls;
462 isc->adapt_pipeline = isc_sama5d2_adapt_pipeline;
464 isc->offsets.csc = ISC_SAMA5D2_CSC_OFFSET;
465 isc->offsets.cbc = ISC_SAMA5D2_CBC_OFFSET;
466 isc->offsets.sub422 = ISC_SAMA5D2_SUB422_OFFSET;
467 isc->offsets.sub420 = ISC_SAMA5D2_SUB420_OFFSET;
468 isc->offsets.rlp = ISC_SAMA5D2_RLP_OFFSET;
469 isc->offsets.his = ISC_SAMA5D2_HIS_OFFSET;
470 isc->offsets.dma = ISC_SAMA5D2_DMA_OFFSET;
471 isc->offsets.version = ISC_SAMA5D2_VERSION_OFFSET;
472 isc->offsets.his_entry = ISC_SAMA5D2_HIS_ENTRY_OFFSET;
474 isc->controller_formats = sama5d2_controller_formats;
475 isc->controller_formats_size = ARRAY_SIZE(sama5d2_controller_formats);
476 isc->formats_list = sama5d2_formats_list;
477 isc->formats_list_size = ARRAY_SIZE(sama5d2_formats_list);
479 /* sama5d2-isc - 8 bits per beat */
480 isc->dcfg = ISC_DCFG_YMBSIZE_BEATS8 | ISC_DCFG_CMBSIZE_BEATS8;
482 /* sama5d2-isc : ISPCK is required and mandatory */
483 isc->ispck_required = true;
485 ret = microchip_isc_pipeline_init(isc);
489 isc->hclock = devm_clk_get(dev, "hclock");
490 if (IS_ERR(isc->hclock)) {
491 ret = PTR_ERR(isc->hclock);
496 ret = clk_prepare_enable(isc->hclock);
502 ret = microchip_isc_clk_init(isc);
504 dev_err(dev, "failed to init isc clock: %d\n", ret);
507 ret = v4l2_device_register(dev, &isc->v4l2_dev);
513 ret = isc_parse_dt(dev, isc);
519 if (list_empty(&isc->subdev_entities)) {
525 list_for_each_entry(subdev_entity, &isc->subdev_entities, list) {
530 v4l2_async_nf_init(&subdev_entity->notifier, &isc->v4l2_dev);
552 if (video_is_registered(&isc->video_dev))
556 regmap_read(isc->regmap, ISC_VERSION + isc->offsets.version, &ver);
558 ret = isc_mc_init(isc, ver);
566 isc->ispck = isc->isc_clks[ISC_ISPCK].clk;
568 ret = clk_prepare_enable(isc->ispck);
575 ret = clk_set_rate(isc->ispck, clk_get_rate(isc->hclock));
586 clk_disable_unprepare(isc->ispck);
592 isc_mc_cleanup(isc);
595 microchip_isc_subdev_cleanup(isc);
598 v4l2_device_unregister(&isc->v4l2_dev);
601 clk_disable_unprepare(isc->hclock);
603 microchip_isc_clk_cleanup(isc);
610 struct isc_device *isc = platform_get_drvdata(pdev);
614 isc_mc_cleanup(isc);
616 microchip_isc_subdev_cleanup(isc);
618 v4l2_device_unregister(&isc->v4l2_dev);
620 clk_disable_unprepare(isc->ispck);
621 clk_disable_unprepare(isc->hclock);
623 microchip_isc_clk_cleanup(isc);
628 struct isc_device *isc = dev_get_drvdata(dev);
630 clk_disable_unprepare(isc->ispck);
631 clk_disable_unprepare(isc->hclock);
638 struct isc_device *isc = dev_get_drvdata(dev);
641 ret = clk_prepare_enable(isc->hclock);
645 ret = clk_prepare_enable(isc->ispck);
647 clk_disable_unprepare(isc->hclock);
658 { .compatible = "atmel,sama5d2-isc" },
668 .name = "microchip-sama5d2-isc",