]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
media: atomisp: Remove custom VCM handling
authorHans de Goede <hdegoede@redhat.com>
Sun, 4 Feb 2024 17:09:43 +0000 (18:09 +0100)
committerMauro Carvalho Chehab <mchehab@kernel.org>
Thu, 11 Apr 2024 13:40:28 +0000 (15:40 +0200)
Remove the custom VCM handling, instead the VCM should be controlled
through its own v4l2-subdev and the new ipu-bridge.c code already
supports instantiating an i2c_client for this and setting up
the necessary endpoints in the fwnode graph.

Reviewed-by: Kieran Bingham <kieran.bingham+renesas@ideasonboard.com>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@kernel.org>
drivers/staging/media/atomisp/include/linux/atomisp.h
drivers/staging/media/atomisp/include/linux/atomisp_platform.h
drivers/staging/media/atomisp/pci/atomisp_internal.h
drivers/staging/media/atomisp/pci/atomisp_ioctl.c
drivers/staging/media/atomisp/pci/atomisp_v4l2.c

index bbbd904b696a3d082c729fe79313c419e80db5fa..d9a7a599038d6612393fe91bcce61d48c66af12d 100644 (file)
@@ -914,9 +914,6 @@ enum atomisp_burst_capture_options {
 /* VCM step time */
 #define V4L2_CID_VCM_TIMING                (V4L2_CID_CAMERA_LASTP1 + 12)
 
-/* Query Focus Status */
-#define V4L2_CID_FOCUS_STATUS              (V4L2_CID_CAMERA_LASTP1 + 14)
-
 /* number of frames to skip at stream start */
 #define V4L2_CID_G_SKIP_FRAMES            (V4L2_CID_CAMERA_LASTP1 + 17)
 
index 487ef5846c248fd6882b64dbec53e02fec01e425..2535402afd734dc752ad56ba0329f4662e280a36 100644 (file)
@@ -111,9 +111,8 @@ enum atomisp_input_format {
 
 enum intel_v4l2_subdev_type {
        RAW_CAMERA = 1,
-       CAMERA_MOTOR = 2,
-       LED_FLASH = 3,
-       TEST_PATTERN = 4,
+       LED_FLASH = 2,
+       TEST_PATTERN = 3,
 };
 
 struct intel_v4l2_subdev_id {
index bba9bc64d44745a6313da0ebcae8333b3d5a57b8..ca8ed3a6b9b8ee266cd154f3cd4217f222e79142 100644 (file)
@@ -134,9 +134,6 @@ struct atomisp_input_subdev {
        struct v4l2_rect active_rect;
        /* Sensor state for which == V4L2_SUBDEV_FORMAT_TRY calls */
        struct v4l2_subdev_state *try_sd_state;
-
-       struct v4l2_subdev *motor;
-
        /*
         * To show this resource is used by
         * which stream, in ISP multiple stream mode
@@ -210,7 +207,6 @@ struct atomisp_device {
        unsigned int input_cnt;
        struct atomisp_input_subdev inputs[ATOM_ISP_MAX_INPUTS];
        struct v4l2_subdev *flash;
-       struct v4l2_subdev *motor;
 
        struct atomisp_regs saved_regs;
        struct atomisp_css_env css_env;
index bb8e5e883b5080a8e7fc276d49efe6ecdaecb395..ef555054fdbf4beff1190918df6f4d573448c610 100644 (file)
@@ -557,7 +557,6 @@ static int atomisp_enum_input(struct file *file, void *fh,
        struct video_device *vdev = video_devdata(file);
        struct atomisp_device *isp = video_get_drvdata(vdev);
        int index = input->index;
-       struct v4l2_subdev *motor;
 
        if (index >= isp->input_cnt)
                return -EINVAL;
@@ -569,28 +568,6 @@ static int atomisp_enum_input(struct file *file, void *fh,
        strscpy(input->name, isp->inputs[index].camera->name,
                sizeof(input->name));
 
-       /*
-        * HACK: append actuator's name to sensor's
-        * As currently userspace can't talk directly to subdev nodes, this
-        * ioctl is the only way to enum inputs + possible external actuators
-        * for 3A tuning purpose.
-        */
-       if (!IS_ISP2401)
-               motor = isp->inputs[index].motor;
-       else
-               motor = isp->motor;
-
-       if (motor && strlen(motor->name) > 0) {
-               const int cur_len = strlen(input->name);
-               const int max_size = sizeof(input->name) - cur_len - 1;
-
-               if (max_size > 1) {
-                       input->name[cur_len] = '+';
-                       strscpy(&input->name[cur_len + 1],
-                               motor->name, max_size);
-               }
-       }
-
        input->type = V4L2_INPUT_TYPE_CAMERA;
        input->index = index;
        input->reserved[0] = isp->inputs[index].type;
@@ -629,7 +606,6 @@ static int atomisp_s_input(struct file *file, void *fh, unsigned int input)
        struct atomisp_video_pipe *pipe = atomisp_to_video_pipe(vdev);
        struct atomisp_sub_device *asd = pipe->asd;
        struct v4l2_subdev *camera = NULL;
-       struct v4l2_subdev *motor;
        int ret;
 
        ret = atomisp_pipe_check(pipe, true);
@@ -666,17 +642,6 @@ static int atomisp_s_input(struct file *file, void *fh, unsigned int input)
                return ret;
        }
 
-       if (!IS_ISP2401) {
-               motor = isp->inputs[input].motor;
-       } else {
-               motor = isp->motor;
-               if (motor)
-                       ret = v4l2_subdev_call(motor, core, s_power, 1);
-       }
-
-       if (motor)
-               ret = v4l2_subdev_call(motor, core, init, 1);
-
        asd->input_curr = input;
        /* mark this camera is used by the current stream */
        isp->inputs[input].asd = asd;
@@ -1433,26 +1398,8 @@ static int atomisp_s_ctrl(struct file *file, void *fh,
 static int atomisp_queryctl(struct file *file, void *fh,
                            struct v4l2_queryctrl *qc)
 {
-       int i, ret = -EINVAL;
        struct video_device *vdev = video_devdata(file);
-       struct atomisp_sub_device *asd = atomisp_to_video_pipe(vdev)->asd;
-       struct atomisp_device *isp = video_get_drvdata(vdev);
-
-       switch (qc->id) {
-       case V4L2_CID_FOCUS_ABSOLUTE:
-       case V4L2_CID_FOCUS_RELATIVE:
-       case V4L2_CID_FOCUS_STATUS:
-               if (!IS_ISP2401) {
-                       return v4l2_queryctrl(isp->inputs[asd->input_curr].camera->
-                                           ctrl_handler, qc);
-               }
-               /* ISP2401 */
-               if (isp->motor)
-                       return v4l2_queryctrl(isp->motor->ctrl_handler, qc);
-               else
-                       return v4l2_queryctrl(isp->inputs[asd->input_curr].
-                                             camera->ctrl_handler, qc);
-       }
+       int i, ret = -EINVAL;
 
        if (qc->id & V4L2_CTRL_FLAG_NEXT_CTRL)
                return ret;
@@ -1478,16 +1425,10 @@ static int atomisp_camera_g_ext_ctrls(struct file *file, void *fh,
        struct video_device *vdev = video_devdata(file);
        struct atomisp_sub_device *asd = atomisp_to_video_pipe(vdev)->asd;
        struct atomisp_device *isp = video_get_drvdata(vdev);
-       struct v4l2_subdev *motor;
        struct v4l2_control ctrl;
        int i;
        int ret = 0;
 
-       if (!IS_ISP2401)
-               motor = isp->inputs[asd->input_curr].motor;
-       else
-               motor = isp->motor;
-
        for (i = 0; i < c->count; i++) {
                ctrl.id = c->controls[i].id;
                ctrl.value = c->controls[i].value;
@@ -1509,13 +1450,6 @@ static int atomisp_camera_g_ext_ctrls(struct file *file, void *fh,
                            v4l2_g_ctrl(isp->inputs[asd->input_curr].camera->
                                        ctrl_handler, &ctrl);
                        break;
-               case V4L2_CID_FOCUS_ABSOLUTE:
-               case V4L2_CID_FOCUS_RELATIVE:
-               case V4L2_CID_FOCUS_STATUS:
-               case V4L2_CID_FOCUS_AUTO:
-                       if (motor)
-                               ret = v4l2_g_ctrl(motor->ctrl_handler, &ctrl);
-                       break;
                case V4L2_CID_FLASH_STATUS:
                case V4L2_CID_FLASH_INTENSITY:
                case V4L2_CID_FLASH_TORCH_INTENSITY:
@@ -1584,16 +1518,10 @@ static int atomisp_camera_s_ext_ctrls(struct file *file, void *fh,
        struct video_device *vdev = video_devdata(file);
        struct atomisp_sub_device *asd = atomisp_to_video_pipe(vdev)->asd;
        struct atomisp_device *isp = video_get_drvdata(vdev);
-       struct v4l2_subdev *motor;
        struct v4l2_control ctrl;
        int i;
        int ret = 0;
 
-       if (!IS_ISP2401)
-               motor = isp->inputs[asd->input_curr].motor;
-       else
-               motor = isp->motor;
-
        for (i = 0; i < c->count; i++) {
                struct v4l2_ctrl *ctr;
 
@@ -1616,18 +1544,6 @@ static int atomisp_camera_s_ext_ctrls(struct file *file, void *fh,
                                          isp->inputs[asd->input_curr].camera->
                                          ctrl_handler, &ctrl);
                        break;
-               case V4L2_CID_FOCUS_ABSOLUTE:
-               case V4L2_CID_FOCUS_RELATIVE:
-               case V4L2_CID_FOCUS_STATUS:
-               case V4L2_CID_FOCUS_AUTO:
-                       if (motor)
-                               ret = v4l2_s_ctrl(NULL, motor->ctrl_handler,
-                                                 &ctrl);
-                       else
-                               ret = v4l2_s_ctrl(NULL,
-                                                 isp->inputs[asd->input_curr].
-                                                 camera->ctrl_handler, &ctrl);
-                       break;
                case V4L2_CID_FLASH_STATUS:
                case V4L2_CID_FLASH_INTENSITY:
                case V4L2_CID_FLASH_TORCH_INTENSITY:
index 5a97013094f26b48cabf24a45b729bd6733c72b3..9a0853be0e795f300d47583d12f6bbf086e828af 100644 (file)
@@ -823,13 +823,6 @@ static int atomisp_subdev_probe(struct atomisp_device *isp)
                        isp->sensor_lanes[mipi_port] = subdevs->lanes;
                        isp->sensor_subdevs[subdevs->port] = subdevs->subdev;
                        break;
-               case CAMERA_MOTOR:
-                       if (isp->motor) {
-                               dev_warn(isp->dev, "too many atomisp motors\n");
-                               continue;
-                       }
-                       isp->motor = subdevs->subdev;
-                       break;
                case LED_FLASH:
                        if (isp->flash) {
                                dev_warn(isp->dev, "too many atomisp flash devices\n");
@@ -1066,14 +1059,6 @@ int atomisp_register_device_nodes(struct atomisp_device *isp)
 
                atomisp_init_sensor(input);
 
-               /*
-                * HACK: Currently VCM belongs to primary sensor only, but correct
-                * approach must be to acquire from platform code which sensor
-                * owns it.
-                */
-               if (i == ATOMISP_CAMERA_PORT_PRIMARY)
-                       input->motor = isp->motor;
-
                err = media_create_pad_link(&input->camera->entity, 0,
                                            &isp->csi2_port[i].subdev.entity,
                                            CSI2_PAD_SINK,