Lines Matching full:dphy

32 #define RK1608_DPHY_NAME	"RK1608-dphy"
696 static int rk1608_initialize_controls(struct rk1608_dphy *dphy) in rk1608_initialize_controls() argument
701 u32 idx = dphy->fmt_inf_idx; in rk1608_initialize_controls()
706 handler = &dphy->ctrl_handler; in rk1608_initialize_controls()
711 dphy->link_freq = v4l2_ctrl_new_int_menu(handler, NULL, in rk1608_initialize_controls()
713 0, &dphy->link_freqs); in rk1608_initialize_controls()
714 if (dphy->link_freq) in rk1608_initialize_controls()
715 dphy->link_freq->flags |= V4L2_CTRL_FLAG_READ_ONLY; in rk1608_initialize_controls()
717 switch (dphy->fmt_inf[idx].data_type) { in rk1608_initialize_controls()
728 pixel_rate = dphy->link_freqs * dphy->fmt_inf[idx].mipi_lane * 2; in rk1608_initialize_controls()
730 dphy->pixel_rate = v4l2_ctrl_new_std(handler, NULL, in rk1608_initialize_controls()
734 dphy->hblank = v4l2_ctrl_new_std(handler, in rk1608_initialize_controls()
738 if (dphy->hblank) in rk1608_initialize_controls()
739 dphy->hblank->flags |= flags; in rk1608_initialize_controls()
741 dphy->vblank = v4l2_ctrl_new_std(handler, in rk1608_initialize_controls()
745 if (dphy->vblank) in rk1608_initialize_controls()
746 dphy->vblank->flags |= flags; in rk1608_initialize_controls()
748 dphy->exposure = v4l2_ctrl_new_std(handler, in rk1608_initialize_controls()
752 if (dphy->exposure) in rk1608_initialize_controls()
753 dphy->exposure->flags |= flags; in rk1608_initialize_controls()
755 dphy->gain = v4l2_ctrl_new_std(handler, in rk1608_initialize_controls()
759 if (dphy->gain) in rk1608_initialize_controls()
760 dphy->gain->flags |= flags; in rk1608_initialize_controls()
767 dev_err(dphy->dev, in rk1608_initialize_controls()
772 dphy->sd.ctrl_handler = handler; in rk1608_initialize_controls()
817 static int rk1608_dphy_dt_property(struct rk1608_dphy *dphy) in rk1608_dphy_dt_property() argument
820 struct device_node *node = dphy->dev->of_node; in rk1608_dphy_dt_property()
827 ret = of_property_read_u32(node, "id", &dphy->sd.grp_id); in rk1608_dphy_dt_property()
829 dev_warn(dphy->dev, "Can not get id!"); in rk1608_dphy_dt_property()
831 ret = of_property_read_u32(node, "cam_nums", &dphy->cam_nums); in rk1608_dphy_dt_property()
833 dev_warn(dphy->dev, "Can not get cam_nums!"); in rk1608_dphy_dt_property()
835 ret = of_property_read_u32(node, "in_mipi", &dphy->in_mipi); in rk1608_dphy_dt_property()
837 dev_warn(dphy->dev, "Can not get in_mipi!"); in rk1608_dphy_dt_property()
839 ret = of_property_read_u32(node, "out_mipi", &dphy->out_mipi); in rk1608_dphy_dt_property()
841 dev_warn(dphy->dev, "Can not get out_mipi!"); in rk1608_dphy_dt_property()
843 ret = of_property_read_u64(node, "link-freqs", &dphy->link_freqs); in rk1608_dphy_dt_property()
845 dev_warn(dphy->dev, "Can not get link_freqs!"); in rk1608_dphy_dt_property()
847 ret = of_property_read_u32(node, "sensor_i2c_bus", &dphy->i2c_bus); in rk1608_dphy_dt_property()
849 dev_warn(dphy->dev, "Can not get sensor_i2c_bus!"); in rk1608_dphy_dt_property()
851 ret = of_property_read_u32(node, "sensor_i2c_addr", &dphy->i2c_addr); in rk1608_dphy_dt_property()
853 dev_warn(dphy->dev, "Can not get sensor_i2c_addr!"); in rk1608_dphy_dt_property()
855 ret = of_property_read_string(node, "sensor-name", &dphy->sensor_name); in rk1608_dphy_dt_property()
857 dev_warn(dphy->dev, "Can not get sensor-name!"); in rk1608_dphy_dt_property()
866 &dphy->fmt_inf[idx].data_type); in rk1608_dphy_dt_property()
868 dev_warn(dphy->dev, "Can not get data_type!"); in rk1608_dphy_dt_property()
871 &dphy->fmt_inf[idx].mipi_lane); in rk1608_dphy_dt_property()
873 dev_warn(dphy->dev, "Can not get mipi_lane!"); in rk1608_dphy_dt_property()
876 &dphy->fmt_inf[idx].mipi_lane_out); in rk1608_dphy_dt_property()
878 dev_warn(dphy->dev, "Can not get mipi_lane_out!"); in rk1608_dphy_dt_property()
881 &dphy->fmt_inf[idx].mf.field); in rk1608_dphy_dt_property()
883 dev_warn(dphy->dev, "Can not get field!"); in rk1608_dphy_dt_property()
886 &dphy->fmt_inf[idx].mf.colorspace); in rk1608_dphy_dt_property()
888 dev_warn(dphy->dev, "Can not get colorspace!"); in rk1608_dphy_dt_property()
891 &dphy->fmt_inf[idx].mf.code); in rk1608_dphy_dt_property()
893 dev_warn(dphy->dev, "Can not get code!"); in rk1608_dphy_dt_property()
896 &dphy->fmt_inf[idx].mf.width); in rk1608_dphy_dt_property()
898 dev_warn(dphy->dev, "Can not get width!"); in rk1608_dphy_dt_property()
901 &dphy->fmt_inf[idx].mf.height); in rk1608_dphy_dt_property()
903 dev_warn(dphy->dev, "Can not get height!"); in rk1608_dphy_dt_property()
906 &dphy->fmt_inf[idx].hactive); in rk1608_dphy_dt_property()
908 dev_warn(dphy->dev, "Can not get hactive!"); in rk1608_dphy_dt_property()
911 &dphy->fmt_inf[idx].vactive); in rk1608_dphy_dt_property()
913 dev_warn(dphy->dev, "Can not get vactive!"); in rk1608_dphy_dt_property()
916 &dphy->fmt_inf[idx].htotal); in rk1608_dphy_dt_property()
918 dev_warn(dphy->dev, "Can not get htotal!"); in rk1608_dphy_dt_property()
921 &dphy->fmt_inf[idx].vtotal); in rk1608_dphy_dt_property()
923 dev_warn(dphy->dev, "Can not get vtotal!"); in rk1608_dphy_dt_property()
926 (u32 *)&dphy->fmt_inf[idx].in_ch[0], 5); in rk1608_dphy_dt_property()
928 dev_warn(dphy->dev, "Can not get inch0-info!"); in rk1608_dphy_dt_property()
931 (u32 *)&dphy->fmt_inf[idx].in_ch[1], 5); in rk1608_dphy_dt_property()
933 dev_info(dphy->dev, "Can not get inch1-info!"); in rk1608_dphy_dt_property()
936 (u32 *)&dphy->fmt_inf[idx].in_ch[2], 5); in rk1608_dphy_dt_property()
938 dev_info(dphy->dev, "Can not get inch2-info!"); in rk1608_dphy_dt_property()
941 (u32 *)&dphy->fmt_inf[idx].in_ch[3], 5); in rk1608_dphy_dt_property()
943 dev_info(dphy->dev, "Can not get inch3-info!"); in rk1608_dphy_dt_property()
946 (u32 *)&dphy->fmt_inf[idx].out_ch[0], 5); in rk1608_dphy_dt_property()
948 dev_warn(dphy->dev, "Can not get outch0-info!"); in rk1608_dphy_dt_property()
951 (u32 *)&dphy->fmt_inf[idx].out_ch[1], 5); in rk1608_dphy_dt_property()
953 dev_info(dphy->dev, "Can not get outch1-info!"); in rk1608_dphy_dt_property()
956 (u32 *)&dphy->fmt_inf[idx].out_ch[2], 5); in rk1608_dphy_dt_property()
958 dev_info(dphy->dev, "Can not get outch2-info!"); in rk1608_dphy_dt_property()
961 (u32 *)&dphy->fmt_inf[idx].out_ch[3], 5); in rk1608_dphy_dt_property()
963 dev_info(dphy->dev, "Can not get outch3-info!"); in rk1608_dphy_dt_property()
966 &dphy->fmt_inf[idx].hcrop); in rk1608_dphy_dt_property()
968 dev_warn(dphy->dev, "Can not get hcrop!"); in rk1608_dphy_dt_property()
971 &dphy->fmt_inf[idx].vcrop); in rk1608_dphy_dt_property()
973 dev_warn(dphy->dev, "Can not get vcrop!"); in rk1608_dphy_dt_property()
981 dphy->fmt_inf_num = idx; in rk1608_dphy_dt_property()
993 dev_err(dphy->dev, "get too mach sub_sensor node, max 4.\n"); in rk1608_dphy_dt_property()
998 &dphy->sub_sensor[sub_idx].id); in rk1608_dphy_dt_property()
1000 dev_warn(dphy->dev, "Can not get sub sensor id!"); in rk1608_dphy_dt_property()
1002 dev_info(dphy->dev, "get sub sensor id:%d", in rk1608_dphy_dt_property()
1003 dphy->sub_sensor[sub_idx].id); in rk1608_dphy_dt_property()
1006 &dphy->sub_sensor[sub_idx].in_mipi); in rk1608_dphy_dt_property()
1008 dev_warn(dphy->dev, "Can not get sub sensor in_mipi!"); in rk1608_dphy_dt_property()
1010 dev_info(dphy->dev, "get sub sensor in_mipi:%d", in rk1608_dphy_dt_property()
1011 dphy->sub_sensor[sub_idx].in_mipi); in rk1608_dphy_dt_property()
1014 &dphy->sub_sensor[sub_idx].out_mipi); in rk1608_dphy_dt_property()
1016 dev_warn(dphy->dev, "Can not get sub sensor out_mipi!"); in rk1608_dphy_dt_property()
1018 dev_info(dphy->dev, "get sub sensor out_mipi:%d", in rk1608_dphy_dt_property()
1019 dphy->sub_sensor[sub_idx].out_mipi); in rk1608_dphy_dt_property()
1027 dphy->sub_sensor_num = sub_idx; in rk1608_dphy_dt_property()
1031 dev_info(dphy->dev, "get link sensor node:%s\n", node->full_name); in rk1608_dphy_dt_property()
1036 dev_err(dphy->dev, "can not get link sensor node\n"); in rk1608_dphy_dt_property()
1038 dphy->link_sensor_client = link_sensor_client; in rk1608_dphy_dt_property()
1039 dev_info(dphy->dev, "get link sensor client\n"); in rk1608_dphy_dt_property()
1042 dev_err(dphy->dev, "can not get link-sensor node\n"); in rk1608_dphy_dt_property()
1054 struct rk1608_dphy *dphy; in rk1608_dphy_probe() local
1060 dphy = devm_kzalloc(&pdev->dev, sizeof(*dphy), GFP_KERNEL); in rk1608_dphy_probe()
1061 if (!dphy) in rk1608_dphy_probe()
1065 &dphy->module_index); in rk1608_dphy_probe()
1067 &dphy->module_facing); in rk1608_dphy_probe()
1069 &dphy->module_name); in rk1608_dphy_probe()
1071 &dphy->len_name); in rk1608_dphy_probe()
1073 dev_err(dphy->dev, in rk1608_dphy_probe()
1078 dphy->dev = &pdev->dev; in rk1608_dphy_probe()
1079 platform_set_drvdata(pdev, dphy); in rk1608_dphy_probe()
1080 sd = &dphy->sd; in rk1608_dphy_probe()
1083 rk1608_dphy_dt_property(dphy); in rk1608_dphy_probe()
1086 if (strcmp(dphy->module_facing, "back") == 0) in rk1608_dphy_probe()
1091 snprintf(sd->name, sizeof(sd->name), "m%02d_%s_%s RK1608-dphy%d", in rk1608_dphy_probe()
1092 dphy->module_index, facing, in rk1608_dphy_probe()
1094 rk1608_initialize_controls(dphy); in rk1608_dphy_probe()
1097 dphy->pad.flags = MEDIA_PAD_FL_SOURCE; in rk1608_dphy_probe()
1100 ret = media_entity_pads_init(&sd->entity, 1, &dphy->pad); in rk1608_dphy_probe()
1107 dev_info(dphy->dev, "RK1608-dphy(%d) probe success!\n", sd->grp_id); in rk1608_dphy_probe()
1113 v4l2_ctrl_handler_free(dphy->sd.ctrl_handler); in rk1608_dphy_probe()
1114 devm_kfree(&pdev->dev, dphy); in rk1608_dphy_probe()
1120 struct rk1608_dphy *dphy = platform_get_drvdata(pdev); in rk1608_dphy_remove() local
1122 v4l2_async_unregister_subdev(&dphy->sd); in rk1608_dphy_remove()
1123 media_entity_cleanup(&dphy->sd.entity); in rk1608_dphy_remove()
1124 v4l2_ctrl_handler_free(&dphy->ctrl_handler); in rk1608_dphy_remove()
1130 { .compatible = "rockchip,rk1608-dphy" },