Lines Matching refs:xcsi2rxss

271 static inline u32 xcsi2rxss_read(struct xcsi2rxss_state *xcsi2rxss, u32 addr)  in xcsi2rxss_read()  argument
273 return ioread32(xcsi2rxss->iomem + addr); in xcsi2rxss_read()
276 static inline void xcsi2rxss_write(struct xcsi2rxss_state *xcsi2rxss, u32 addr, in xcsi2rxss_write() argument
279 iowrite32(value, xcsi2rxss->iomem + addr); in xcsi2rxss_write()
282 static inline void xcsi2rxss_clr(struct xcsi2rxss_state *xcsi2rxss, u32 addr, in xcsi2rxss_clr() argument
285 xcsi2rxss_write(xcsi2rxss, addr, in xcsi2rxss_clr()
286 xcsi2rxss_read(xcsi2rxss, addr) & ~clr); in xcsi2rxss_clr()
289 static inline void xcsi2rxss_set(struct xcsi2rxss_state *xcsi2rxss, u32 addr, in xcsi2rxss_set() argument
292 xcsi2rxss_write(xcsi2rxss, addr, xcsi2rxss_read(xcsi2rxss, addr) | set); in xcsi2rxss_set()
414 struct xcsi2rxss_state *xcsi2rxss = to_xcsi2rxssstate(sd); in xcsi2rxss_log_status() local
415 struct device *dev = xcsi2rxss->dev; in xcsi2rxss_log_status()
419 mutex_lock(&xcsi2rxss->lock); in xcsi2rxss_log_status()
421 xcsi2rxss_log_counters(xcsi2rxss); in xcsi2rxss_log_status()
424 data = xcsi2rxss_read(xcsi2rxss, XCSI_CSR_OFFSET); in xcsi2rxss_log_status()
436 data = xcsi2rxss_read(xcsi2rxss, XCSI_CLKINFR_OFFSET); in xcsi2rxss_log_status()
444 data = xcsi2rxss_read(xcsi2rxss, reg); in xcsi2rxss_log_status()
457 if (xcsi2rxss->en_vcx) in xcsi2rxss_log_status()
467 data = xcsi2rxss_read(xcsi2rxss, reg); in xcsi2rxss_log_status()
474 data = xcsi2rxss_read(xcsi2rxss, reg); in xcsi2rxss_log_status()
484 mutex_unlock(&xcsi2rxss->lock); in xcsi2rxss_log_status()
661 struct xcsi2rxss_state *xcsi2rxss = to_xcsi2rxssstate(sd); in xcsi2rxss_s_stream() local
664 mutex_lock(&xcsi2rxss->lock); in xcsi2rxss_s_stream()
666 if (enable == xcsi2rxss->streaming) in xcsi2rxss_s_stream()
670 xcsi2rxss_reset_event_counters(xcsi2rxss); in xcsi2rxss_s_stream()
671 ret = xcsi2rxss_start_stream(xcsi2rxss); in xcsi2rxss_s_stream()
673 xcsi2rxss_stop_stream(xcsi2rxss); in xcsi2rxss_s_stream()
674 xcsi2rxss_hard_reset(xcsi2rxss); in xcsi2rxss_s_stream()
678 mutex_unlock(&xcsi2rxss->lock); in xcsi2rxss_s_stream()
683 __xcsi2rxss_get_pad_format(struct xcsi2rxss_state *xcsi2rxss, in __xcsi2rxss_get_pad_format() argument
689 return v4l2_subdev_get_try_format(&xcsi2rxss->subdev, cfg, pad); in __xcsi2rxss_get_pad_format()
691 return &xcsi2rxss->format; in __xcsi2rxss_get_pad_format()
710 struct xcsi2rxss_state *xcsi2rxss = to_xcsi2rxssstate(sd); in xcsi2rxss_init_cfg() local
714 mutex_lock(&xcsi2rxss->lock); in xcsi2rxss_init_cfg()
717 *format = xcsi2rxss->default_format; in xcsi2rxss_init_cfg()
719 mutex_unlock(&xcsi2rxss->lock); in xcsi2rxss_init_cfg()
738 struct xcsi2rxss_state *xcsi2rxss = to_xcsi2rxssstate(sd); in xcsi2rxss_get_format() local
740 mutex_lock(&xcsi2rxss->lock); in xcsi2rxss_get_format()
741 fmt->format = *__xcsi2rxss_get_pad_format(xcsi2rxss, cfg, fmt->pad, in xcsi2rxss_get_format()
743 mutex_unlock(&xcsi2rxss->lock); in xcsi2rxss_get_format()
765 struct xcsi2rxss_state *xcsi2rxss = to_xcsi2rxssstate(sd); in xcsi2rxss_set_format() local
769 mutex_lock(&xcsi2rxss->lock); in xcsi2rxss_set_format()
776 __format = __xcsi2rxss_get_pad_format(xcsi2rxss, cfg, in xcsi2rxss_set_format()
782 mutex_unlock(&xcsi2rxss->lock); in xcsi2rxss_set_format()
792 if (dt != xcsi2rxss->datatype && dt != XCSI_DT_RAW8) { in xcsi2rxss_set_format()
793 dev_dbg(xcsi2rxss->dev, "Unsupported media bus format"); in xcsi2rxss_set_format()
795 fmt->format.code = xcsi2rxss_get_nth_mbus(xcsi2rxss->datatype, in xcsi2rxss_set_format()
800 mutex_unlock(&xcsi2rxss->lock); in xcsi2rxss_set_format()
869 static int xcsi2rxss_parse_of(struct xcsi2rxss_state *xcsi2rxss) in xcsi2rxss_parse_of() argument
871 struct device *dev = xcsi2rxss->dev; in xcsi2rxss_parse_of()
883 xcsi2rxss->en_vcx = of_property_read_bool(node, "xlnx,en-vcx"); in xcsi2rxss_parse_of()
885 xcsi2rxss->enable_active_lanes = in xcsi2rxss_parse_of()
889 &xcsi2rxss->datatype); in xcsi2rxss_parse_of()
895 switch (xcsi2rxss->datatype) { in xcsi2rxss_parse_of()
949 xcsi2rxss->max_num_lanes = vep.bus.mipi_csi2.num_data_lanes; in xcsi2rxss_parse_of()
962 xcsi2rxss->en_vcx ? "enabled" : "disabled", in xcsi2rxss_parse_of()
963 xcsi2rxss->max_num_lanes, in xcsi2rxss_parse_of()
964 xcsi2rxss->enable_active_lanes ? "dynamic" : "static", in xcsi2rxss_parse_of()
965 xcsi2rxss->datatype); in xcsi2rxss_parse_of()
973 struct xcsi2rxss_state *xcsi2rxss; in xcsi2rxss_probe() local
978 xcsi2rxss = devm_kzalloc(dev, sizeof(*xcsi2rxss), GFP_KERNEL); in xcsi2rxss_probe()
979 if (!xcsi2rxss) in xcsi2rxss_probe()
982 xcsi2rxss->dev = dev; in xcsi2rxss_probe()
984 xcsi2rxss->clks = devm_kmemdup(dev, xcsi2rxss_clks, in xcsi2rxss_probe()
986 if (!xcsi2rxss->clks) in xcsi2rxss_probe()
990 xcsi2rxss->rst_gpio = devm_gpiod_get_optional(dev, "video-reset", in xcsi2rxss_probe()
992 if (IS_ERR(xcsi2rxss->rst_gpio)) { in xcsi2rxss_probe()
993 if (PTR_ERR(xcsi2rxss->rst_gpio) != -EPROBE_DEFER) in xcsi2rxss_probe()
995 return PTR_ERR(xcsi2rxss->rst_gpio); in xcsi2rxss_probe()
998 ret = xcsi2rxss_parse_of(xcsi2rxss); in xcsi2rxss_probe()
1002 xcsi2rxss->iomem = devm_platform_ioremap_resource(pdev, 0); in xcsi2rxss_probe()
1003 if (IS_ERR(xcsi2rxss->iomem)) in xcsi2rxss_probe()
1004 return PTR_ERR(xcsi2rxss->iomem); in xcsi2rxss_probe()
1012 dev_name(dev), xcsi2rxss); in xcsi2rxss_probe()
1018 ret = clk_bulk_get(dev, num_clks, xcsi2rxss->clks); in xcsi2rxss_probe()
1023 ret = clk_bulk_prepare_enable(num_clks, xcsi2rxss->clks); in xcsi2rxss_probe()
1027 mutex_init(&xcsi2rxss->lock); in xcsi2rxss_probe()
1029 xcsi2rxss_hard_reset(xcsi2rxss); in xcsi2rxss_probe()
1030 xcsi2rxss_soft_reset(xcsi2rxss); in xcsi2rxss_probe()
1033 xcsi2rxss->pads[XVIP_PAD_SINK].flags = MEDIA_PAD_FL_SINK; in xcsi2rxss_probe()
1034 xcsi2rxss->pads[XVIP_PAD_SOURCE].flags = MEDIA_PAD_FL_SOURCE; in xcsi2rxss_probe()
1037 xcsi2rxss->default_format.code = in xcsi2rxss_probe()
1038 xcsi2rxss_get_nth_mbus(xcsi2rxss->datatype, 0); in xcsi2rxss_probe()
1039 xcsi2rxss->default_format.field = V4L2_FIELD_NONE; in xcsi2rxss_probe()
1040 xcsi2rxss->default_format.colorspace = V4L2_COLORSPACE_SRGB; in xcsi2rxss_probe()
1041 xcsi2rxss->default_format.width = XCSI_DEFAULT_WIDTH; in xcsi2rxss_probe()
1042 xcsi2rxss->default_format.height = XCSI_DEFAULT_HEIGHT; in xcsi2rxss_probe()
1043 xcsi2rxss->format = xcsi2rxss->default_format; in xcsi2rxss_probe()
1046 subdev = &xcsi2rxss->subdev; in xcsi2rxss_probe()
1052 v4l2_set_subdevdata(subdev, xcsi2rxss); in xcsi2rxss_probe()
1055 xcsi2rxss->pads); in xcsi2rxss_probe()
1059 platform_set_drvdata(pdev, xcsi2rxss); in xcsi2rxss_probe()
1070 mutex_destroy(&xcsi2rxss->lock); in xcsi2rxss_probe()
1071 clk_bulk_disable_unprepare(num_clks, xcsi2rxss->clks); in xcsi2rxss_probe()
1073 clk_bulk_put(num_clks, xcsi2rxss->clks); in xcsi2rxss_probe()
1079 struct xcsi2rxss_state *xcsi2rxss = platform_get_drvdata(pdev); in xcsi2rxss_remove() local
1080 struct v4l2_subdev *subdev = &xcsi2rxss->subdev; in xcsi2rxss_remove()
1085 mutex_destroy(&xcsi2rxss->lock); in xcsi2rxss_remove()
1086 clk_bulk_disable_unprepare(num_clks, xcsi2rxss->clks); in xcsi2rxss_remove()
1087 clk_bulk_put(num_clks, xcsi2rxss->clks); in xcsi2rxss_remove()