Lines Matching refs:xcsi2rxss

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