Lines Matching refs:xcsi2rxss

256 static inline u32 xcsi2rxss_read(struct xcsi2rxss_state *xcsi2rxss, u32 addr)
258 return ioread32(xcsi2rxss->iomem + addr);
261 static inline void xcsi2rxss_write(struct xcsi2rxss_state *xcsi2rxss, u32 addr,
264 iowrite32(value, xcsi2rxss->iomem + addr);
267 static inline void xcsi2rxss_clr(struct xcsi2rxss_state *xcsi2rxss, u32 addr,
270 xcsi2rxss_write(xcsi2rxss, addr,
271 xcsi2rxss_read(xcsi2rxss, addr) & ~clr);
274 static inline void xcsi2rxss_set(struct xcsi2rxss_state *xcsi2rxss, u32 addr,
277 xcsi2rxss_write(xcsi2rxss, addr, xcsi2rxss_read(xcsi2rxss, addr) | set);
399 struct xcsi2rxss_state *xcsi2rxss = to_xcsi2rxssstate(sd);
400 struct device *dev = xcsi2rxss->dev;
404 mutex_lock(&xcsi2rxss->lock);
406 xcsi2rxss_log_counters(xcsi2rxss);
409 data = xcsi2rxss_read(xcsi2rxss, XCSI_CSR_OFFSET);
421 data = xcsi2rxss_read(xcsi2rxss, XCSI_CLKINFR_OFFSET);
429 data = xcsi2rxss_read(xcsi2rxss, reg);
442 if (xcsi2rxss->en_vcx)
452 data = xcsi2rxss_read(xcsi2rxss, reg);
459 data = xcsi2rxss_read(xcsi2rxss, reg);
469 mutex_unlock(&xcsi2rxss->lock);
646 struct xcsi2rxss_state *xcsi2rxss = to_xcsi2rxssstate(sd);
649 mutex_lock(&xcsi2rxss->lock);
651 if (enable == xcsi2rxss->streaming)
655 xcsi2rxss_reset_event_counters(xcsi2rxss);
656 ret = xcsi2rxss_start_stream(xcsi2rxss);
658 xcsi2rxss_stop_stream(xcsi2rxss);
659 xcsi2rxss_hard_reset(xcsi2rxss);
663 mutex_unlock(&xcsi2rxss->lock);
668 __xcsi2rxss_get_pad_format(struct xcsi2rxss_state *xcsi2rxss,
674 return v4l2_subdev_get_try_format(&xcsi2rxss->subdev,
677 return &xcsi2rxss->format;
696 struct xcsi2rxss_state *xcsi2rxss = to_xcsi2rxssstate(sd);
700 mutex_lock(&xcsi2rxss->lock);
703 *format = xcsi2rxss->default_format;
705 mutex_unlock(&xcsi2rxss->lock);
724 struct xcsi2rxss_state *xcsi2rxss = to_xcsi2rxssstate(sd);
726 mutex_lock(&xcsi2rxss->lock);
727 fmt->format = *__xcsi2rxss_get_pad_format(xcsi2rxss, sd_state,
730 mutex_unlock(&xcsi2rxss->lock);
752 struct xcsi2rxss_state *xcsi2rxss = to_xcsi2rxssstate(sd);
756 mutex_lock(&xcsi2rxss->lock);
763 __format = __xcsi2rxss_get_pad_format(xcsi2rxss, sd_state,
769 mutex_unlock(&xcsi2rxss->lock);
779 if (dt != xcsi2rxss->datatype && dt != MIPI_CSI2_DT_RAW8) {
780 dev_dbg(xcsi2rxss->dev, "Unsupported media bus format");
782 fmt->format.code = xcsi2rxss_get_nth_mbus(xcsi2rxss->datatype,
787 mutex_unlock(&xcsi2rxss->lock);
856 static int xcsi2rxss_parse_of(struct xcsi2rxss_state *xcsi2rxss)
858 struct device *dev = xcsi2rxss->dev;
870 xcsi2rxss->en_vcx = of_property_read_bool(node, "xlnx,en-vcx");
872 xcsi2rxss->enable_active_lanes =
876 &xcsi2rxss->datatype);
882 switch (xcsi2rxss->datatype) {
936 xcsi2rxss->max_num_lanes = vep.bus.mipi_csi2.num_data_lanes;
949 xcsi2rxss->en_vcx ? "enabled" : "disabled",
950 xcsi2rxss->max_num_lanes,
951 xcsi2rxss->enable_active_lanes ? "dynamic" : "static",
952 xcsi2rxss->datatype);
960 struct xcsi2rxss_state *xcsi2rxss;
965 xcsi2rxss = devm_kzalloc(dev, sizeof(*xcsi2rxss), GFP_KERNEL);
966 if (!xcsi2rxss)
969 xcsi2rxss->dev = dev;
971 xcsi2rxss->clks = devm_kmemdup(dev, xcsi2rxss_clks,
973 if (!xcsi2rxss->clks)
977 xcsi2rxss->rst_gpio = devm_gpiod_get_optional(dev, "video-reset",
979 if (IS_ERR(xcsi2rxss->rst_gpio))
980 return dev_err_probe(dev, PTR_ERR(xcsi2rxss->rst_gpio),
983 ret = xcsi2rxss_parse_of(xcsi2rxss);
987 xcsi2rxss->iomem = devm_platform_ioremap_resource(pdev, 0);
988 if (IS_ERR(xcsi2rxss->iomem))
989 return PTR_ERR(xcsi2rxss->iomem);
997 dev_name(dev), xcsi2rxss);
1003 ret = clk_bulk_get(dev, num_clks, xcsi2rxss->clks);
1008 ret = clk_bulk_prepare_enable(num_clks, xcsi2rxss->clks);
1012 mutex_init(&xcsi2rxss->lock);
1014 xcsi2rxss_hard_reset(xcsi2rxss);
1015 xcsi2rxss_soft_reset(xcsi2rxss);
1018 xcsi2rxss->pads[XVIP_PAD_SINK].flags = MEDIA_PAD_FL_SINK;
1019 xcsi2rxss->pads[XVIP_PAD_SOURCE].flags = MEDIA_PAD_FL_SOURCE;
1022 xcsi2rxss->default_format.code =
1023 xcsi2rxss_get_nth_mbus(xcsi2rxss->datatype, 0);
1024 xcsi2rxss->default_format.field = V4L2_FIELD_NONE;
1025 xcsi2rxss->default_format.colorspace = V4L2_COLORSPACE_SRGB;
1026 xcsi2rxss->default_format.width = XCSI_DEFAULT_WIDTH;
1027 xcsi2rxss->default_format.height = XCSI_DEFAULT_HEIGHT;
1028 xcsi2rxss->format = xcsi2rxss->default_format;
1031 subdev = &xcsi2rxss->subdev;
1037 v4l2_set_subdevdata(subdev, xcsi2rxss);
1040 xcsi2rxss->pads);
1044 platform_set_drvdata(pdev, xcsi2rxss);
1055 mutex_destroy(&xcsi2rxss->lock);
1056 clk_bulk_disable_unprepare(num_clks, xcsi2rxss->clks);
1058 clk_bulk_put(num_clks, xcsi2rxss->clks);
1064 struct xcsi2rxss_state *xcsi2rxss = platform_get_drvdata(pdev);
1065 struct v4l2_subdev *subdev = &xcsi2rxss->subdev;
1070 mutex_destroy(&xcsi2rxss->lock);
1071 clk_bulk_disable_unprepare(num_clks, xcsi2rxss->clks);
1072 clk_bulk_put(num_clks, xcsi2rxss->clks);