Lines Matching refs:csid

378 static u32 csid_src_pad_code(struct csid_device *csid, u32 sink_code,  in csid_src_pad_code()  argument
381 if (csid->camss->version == CAMSS_8x16) { in csid_src_pad_code()
386 } else if (csid->camss->version == CAMSS_8x96) { in csid_src_pad_code()
444 struct csid_device *csid = dev; in csid_isr() local
445 enum camss_version ver = csid->camss->version; in csid_isr()
448 value = readl_relaxed(csid->base + CAMSS_CSID_IRQ_STATUS(ver)); in csid_isr()
449 writel_relaxed(value, csid->base + CAMSS_CSID_IRQ_CLEAR_CMD(ver)); in csid_isr()
452 complete(&csid->reset_complete); in csid_isr()
461 static int csid_set_clock_rates(struct csid_device *csid) in csid_set_clock_rates() argument
463 struct device *dev = csid->camss->dev; in csid_set_clock_rates()
468 ret = camss_get_pixel_clock(&csid->subdev.entity, &pixel_clock); in csid_set_clock_rates()
472 for (i = 0; i < csid->nclocks; i++) { in csid_set_clock_rates()
473 struct camss_clock *clock = &csid->clock[i]; in csid_set_clock_rates()
480 csid->formats, in csid_set_clock_rates()
481 csid->nformats, in csid_set_clock_rates()
482 csid->fmt[MSM_CSIPHY_PAD_SINK].code); in csid_set_clock_rates()
483 u8 num_lanes = csid->phy.lane_cnt; in csid_set_clock_rates()
529 static int csid_reset(struct csid_device *csid) in csid_reset() argument
533 reinit_completion(&csid->reset_complete); in csid_reset()
535 writel_relaxed(0x7fff, csid->base + in csid_reset()
536 CAMSS_CSID_RST_CMD(csid->camss->version)); in csid_reset()
538 time = wait_for_completion_timeout(&csid->reset_complete, in csid_reset()
541 dev_err(csid->camss->dev, "CSID reset timeout\n"); in csid_reset()
557 struct csid_device *csid = v4l2_get_subdevdata(sd); in csid_set_power() local
558 struct device *dev = csid->camss->dev; in csid_set_power()
568 ret = regulator_enable(csid->vdda); in csid_set_power()
574 ret = csid_set_clock_rates(csid); in csid_set_power()
576 regulator_disable(csid->vdda); in csid_set_power()
581 ret = camss_enable_clocks(csid->nclocks, csid->clock, dev); in csid_set_power()
583 regulator_disable(csid->vdda); in csid_set_power()
588 enable_irq(csid->irq); in csid_set_power()
590 ret = csid_reset(csid); in csid_set_power()
592 disable_irq(csid->irq); in csid_set_power()
593 camss_disable_clocks(csid->nclocks, csid->clock); in csid_set_power()
594 regulator_disable(csid->vdda); in csid_set_power()
599 hw_version = readl_relaxed(csid->base + CAMSS_CSID_HW_VERSION); in csid_set_power()
602 disable_irq(csid->irq); in csid_set_power()
603 camss_disable_clocks(csid->nclocks, csid->clock); in csid_set_power()
604 ret = regulator_disable(csid->vdda); in csid_set_power()
622 struct csid_device *csid = v4l2_get_subdevdata(sd); in csid_set_stream() local
623 struct csid_testgen_config *tg = &csid->testgen; in csid_set_stream()
624 enum camss_version ver = csid->camss->version; in csid_set_stream()
633 ret = v4l2_ctrl_handler_setup(&csid->ctrls); in csid_set_stream()
635 dev_err(csid->camss->dev, in csid_set_stream()
641 !media_entity_remote_pad(&csid->pads[MSM_CSID_PAD_SINK])) in csid_set_stream()
647 &csid->fmt[MSM_CSID_PAD_SRC]; in csid_set_stream()
649 csid->formats, csid->nformats, f->code); in csid_set_stream()
658 writel_relaxed(val, csid->base + in csid_set_stream()
664 writel_relaxed(val, csid->base + in csid_set_stream()
671 writel_relaxed(val, csid->base + in csid_set_stream()
676 writel_relaxed(val, csid->base + in csid_set_stream()
682 &csid->fmt[MSM_CSID_PAD_SINK]; in csid_set_stream()
684 csid->formats, csid->nformats, f->code); in csid_set_stream()
685 struct csid_phy_config *phy = &csid->phy; in csid_set_stream()
691 csid->base + CAMSS_CSID_CORE_CTRL_0); in csid_set_stream()
697 csid->base + CAMSS_CSID_CORE_CTRL_1); in csid_set_stream()
707 val = readl_relaxed(csid->base + in csid_set_stream()
711 writel_relaxed(val, csid->base + in csid_set_stream()
719 if (csid->camss->version == CAMSS_8x96) { in csid_set_stream()
720 u32 sink_code = csid->fmt[MSM_CSID_PAD_SINK].code; in csid_set_stream()
721 u32 src_code = csid->fmt[MSM_CSID_PAD_SRC].code; in csid_set_stream()
733 writel_relaxed(val, csid->base + in csid_set_stream()
738 writel_relaxed(val, csid->base + in csid_set_stream()
744 writel_relaxed(val, csid->base + in csid_set_stream()
762 __csid_get_format(struct csid_device *csid, in __csid_get_format() argument
768 return v4l2_subdev_get_try_format(&csid->subdev, cfg, pad); in __csid_get_format()
770 return &csid->fmt[pad]; in __csid_get_format()
781 static void csid_try_format(struct csid_device *csid, in csid_try_format() argument
793 for (i = 0; i < csid->nformats; i++) in csid_try_format()
794 if (fmt->code == csid->formats[i].code) in csid_try_format()
798 if (i >= csid->nformats) in csid_try_format()
810 if (csid->testgen_mode->cur.val == 0) { in csid_try_format()
815 *fmt = *__csid_get_format(csid, cfg, in csid_try_format()
817 fmt->code = csid_src_pad_code(csid, fmt->code, 0, code); in csid_try_format()
822 for (i = 0; i < csid->nformats; i++) in csid_try_format()
823 if (csid->formats[i].code == fmt->code) in csid_try_format()
827 if (i >= csid->nformats) in csid_try_format()
852 struct csid_device *csid = v4l2_get_subdevdata(sd); in csid_enum_mbus_code() local
855 if (code->index >= csid->nformats) in csid_enum_mbus_code()
858 code->code = csid->formats[code->index].code; in csid_enum_mbus_code()
860 if (csid->testgen_mode->cur.val == 0) { in csid_enum_mbus_code()
863 sink_fmt = __csid_get_format(csid, cfg, in csid_enum_mbus_code()
867 code->code = csid_src_pad_code(csid, sink_fmt->code, in csid_enum_mbus_code()
872 if (code->index >= csid->nformats) in csid_enum_mbus_code()
875 code->code = csid->formats[code->index].code; in csid_enum_mbus_code()
893 struct csid_device *csid = v4l2_get_subdevdata(sd); in csid_enum_frame_size() local
902 csid_try_format(csid, cfg, fse->pad, &format, fse->which); in csid_enum_frame_size()
912 csid_try_format(csid, cfg, fse->pad, &format, fse->which); in csid_enum_frame_size()
931 struct csid_device *csid = v4l2_get_subdevdata(sd); in csid_get_format() local
934 format = __csid_get_format(csid, cfg, fmt->pad, fmt->which); in csid_get_format()
955 struct csid_device *csid = v4l2_get_subdevdata(sd); in csid_set_format() local
958 format = __csid_get_format(csid, cfg, fmt->pad, fmt->which); in csid_set_format()
962 csid_try_format(csid, cfg, fmt->pad, &fmt->format, fmt->which); in csid_set_format()
967 format = __csid_get_format(csid, cfg, MSM_CSID_PAD_SRC, in csid_set_format()
971 csid_try_format(csid, cfg, MSM_CSID_PAD_SRC, format, in csid_set_format()
1019 static int csid_set_test_pattern(struct csid_device *csid, s32 value) in csid_set_test_pattern() argument
1021 struct csid_testgen_config *tg = &csid->testgen; in csid_set_test_pattern()
1024 if (value && media_entity_remote_pad(&csid->pads[MSM_CSID_PAD_SINK])) in csid_set_test_pattern()
1058 struct csid_device *csid = container_of(ctrl->handler, in csid_s_ctrl() local
1064 ret = csid_set_test_pattern(csid, ctrl->val); in csid_s_ctrl()
1083 int msm_csid_subdev_init(struct camss *camss, struct csid_device *csid, in msm_csid_subdev_init() argument
1092 csid->camss = camss; in msm_csid_subdev_init()
1093 csid->id = id; in msm_csid_subdev_init()
1096 csid->formats = csid_formats_8x16; in msm_csid_subdev_init()
1097 csid->nformats = in msm_csid_subdev_init()
1100 csid->formats = csid_formats_8x96; in msm_csid_subdev_init()
1101 csid->nformats = in msm_csid_subdev_init()
1110 csid->base = devm_ioremap_resource(dev, r); in msm_csid_subdev_init()
1111 if (IS_ERR(csid->base)) { in msm_csid_subdev_init()
1113 return PTR_ERR(csid->base); in msm_csid_subdev_init()
1125 csid->irq = r->start; in msm_csid_subdev_init()
1126 snprintf(csid->irq_name, sizeof(csid->irq_name), "%s_%s%d", in msm_csid_subdev_init()
1127 dev_name(dev), MSM_CSID_NAME, csid->id); in msm_csid_subdev_init()
1128 ret = devm_request_irq(dev, csid->irq, csid_isr, in msm_csid_subdev_init()
1129 IRQF_TRIGGER_RISING, csid->irq_name, csid); in msm_csid_subdev_init()
1135 disable_irq(csid->irq); in msm_csid_subdev_init()
1139 csid->nclocks = 0; in msm_csid_subdev_init()
1140 while (res->clock[csid->nclocks]) in msm_csid_subdev_init()
1141 csid->nclocks++; in msm_csid_subdev_init()
1143 csid->clock = devm_kcalloc(dev, csid->nclocks, sizeof(*csid->clock), in msm_csid_subdev_init()
1145 if (!csid->clock) in msm_csid_subdev_init()
1148 for (i = 0; i < csid->nclocks; i++) { in msm_csid_subdev_init()
1149 struct camss_clock *clock = &csid->clock[i]; in msm_csid_subdev_init()
1179 csid->vdda = devm_regulator_get(dev, res->regulator[0]); in msm_csid_subdev_init()
1180 if (IS_ERR(csid->vdda)) { in msm_csid_subdev_init()
1182 return PTR_ERR(csid->vdda); in msm_csid_subdev_init()
1185 init_completion(&csid->reset_complete); in msm_csid_subdev_init()
1198 struct csid_device *csid = v4l2_get_subdevdata(sd); in msm_csid_get_csid_id() local
1200 *id = csid->id; in msm_csid_get_csid_id()
1240 struct csid_device *csid; in csid_link_setup() local
1246 csid = v4l2_get_subdevdata(sd); in csid_link_setup()
1250 if (csid->testgen_mode->cur.val != 0) in csid_link_setup()
1261 csid->phy.csiphy_id = csiphy->id; in csid_link_setup()
1264 csid->phy.lane_cnt = lane_cfg->num_data; in csid_link_setup()
1265 csid->phy.lane_assign = csid_get_lane_assign(lane_cfg); in csid_link_setup()
1270 csid_set_format(&csid->subdev, NULL, &format); in csid_link_setup()
1315 int msm_csid_register_entity(struct csid_device *csid, in msm_csid_register_entity() argument
1318 struct v4l2_subdev *sd = &csid->subdev; in msm_csid_register_entity()
1319 struct media_pad *pads = csid->pads; in msm_csid_register_entity()
1320 struct device *dev = csid->camss->dev; in msm_csid_register_entity()
1328 MSM_CSID_NAME, csid->id); in msm_csid_register_entity()
1329 v4l2_set_subdevdata(sd, csid); in msm_csid_register_entity()
1331 ret = v4l2_ctrl_handler_init(&csid->ctrls, 1); in msm_csid_register_entity()
1337 csid->testgen_mode = v4l2_ctrl_new_std_menu_items(&csid->ctrls, in msm_csid_register_entity()
1342 if (csid->ctrls.error) { in msm_csid_register_entity()
1343 dev_err(dev, "Failed to init ctrl: %d\n", csid->ctrls.error); in msm_csid_register_entity()
1344 ret = csid->ctrls.error; in msm_csid_register_entity()
1348 csid->subdev.ctrl_handler = &csid->ctrls; in msm_csid_register_entity()
1378 v4l2_ctrl_handler_free(&csid->ctrls); in msm_csid_register_entity()
1387 void msm_csid_unregister_entity(struct csid_device *csid) in msm_csid_unregister_entity() argument
1389 v4l2_device_unregister_subdev(&csid->subdev); in msm_csid_unregister_entity()
1390 media_entity_cleanup(&csid->subdev.entity); in msm_csid_unregister_entity()
1391 v4l2_ctrl_handler_free(&csid->ctrls); in msm_csid_unregister_entity()