Merge branch 'CR_1446_v4l2_syscon_changhuang.liang' into 'jh7110-5.15.y-devel'
authorandy.hu <andy.hu@starfivetech.com>
Thu, 30 Jun 2022 10:41:31 +0000 (10:41 +0000)
committerandy.hu <andy.hu@starfivetech.com>
Thu, 30 Jun 2022 10:41:31 +0000 (10:41 +0000)
V4L2: modify syscon interface

See merge request sdk/linux!208

arch/riscv/boot/dts/starfive/evb-overlay/jh7110-evb-overlay-rgb2hdmi.dts
arch/riscv/boot/dts/starfive/evb-overlay/jh7110-evb-overlay-sdio.dts
arch/riscv/boot/dts/starfive/evb-overlay/jh7110-evb-overlay-uart4-emmc.dts
arch/riscv/boot/dts/starfive/jh7110-evb-pcie-i2s-sd.dts
drivers/media/platform/starfive/v4l2_driver/sc2235.c

index 1593bc2..0397240 100644 (file)
@@ -6,7 +6,7 @@
        compatible = "starfive,jh7110";
 
        //hdmi_output
-       fragment@2 {
+       fragment@0 {
                target-path = "/soc/tda988x_pin";
                __overlay__ {
                        status = "okay";
@@ -14,7 +14,7 @@
        };
 
        //uart1
-       fragment@3 {
+       fragment@1 {
                target-path = "/soc/serial@10010000";
                __overlay__ {
                        status = "okay";
index 80b7256..b2ad0b1 100644 (file)
                };
        };
 
-       //usbdrd30
-       fragment@4 {
-               target-path = "/soc/usbdrd";
-               __overlay__ {
-                       status = "disabled";
-               };
-       };
-
        //sdio1
-       fragment@5 {
+       fragment@3 {
                target-path = "/soc/sdio1@16020000";
                __overlay__ {
                        clock-frequency = <102400000>;
index d92ae07..359fe2d 100644 (file)
        fragment@1 {
                target-path = "/soc/gpio@17020000";
                __overlay__ {
-                       pwm_ch6to7_pins: pwm-ch6to7-pins {
+                       dt_pwm_ch6to7_pins: dt-pwm-ch6to7-pins {
                                pwm-ch6-pins {
                                        sf,pins = <PAD_RGPIO0>;
                                        sf,pin-ioconfig = <IO(GPIO_IE(1))>;
                target-path = "/soc/pwm@120d0000";
                __overlay__ {
                        pinctrl-names = "default";
-                       pinctrl-0 = <&pwm_ch6to7_pins>;
+                       pinctrl-0 = <&dt_pwm_ch6to7_pins>;
                        status = "okay";
                };
        };
index 1aef330..0ac88af 100644 (file)
 };
 
 &sdio1 {
-       clock-frequency = <4000000>;
-       max-frequency = <1000000>;
+       clock-frequency = <102400000>;
+       max-frequency = <100000000>;
        card-detect-delay = <300>;
        bus-width = <4>;
+       broken-cd;
        cap-sd-highspeed;
-       cap-sdio-irq;
-       cap-mmc-hw-reset;
-       non-removable;
-       enable-sdio-wakeup;
-       keep-power-in-suspend;
-       cap-mmc-highspeed;
        post-power-on-delay-ms = <200>;
        pinctrl-names = "default";
        pinctrl-0 = <&sdcard1_pins>;
index 7911590..c6b6d41 100755 (executable)
@@ -129,13 +129,6 @@ struct sc2235_ctrls {
        struct v4l2_ctrl *vflip;
 };
 
-struct sensor_pinctrl_info {
-       struct pinctrl *pinctrl;
-       struct pinctrl_state *reset_state_low;
-       struct pinctrl_state *reset_state_high;
-       bool use_pinctrl;
-};
-
 struct sc2235_dev {
        struct i2c_client *i2c_client;
        struct v4l2_subdev sd;
@@ -169,38 +162,8 @@ struct sc2235_dev {
 
        bool pending_mode_change;
        bool streaming;
-
-       struct sensor_pinctrl_info sc2235_pctrl;
 };
 
-int sc2235_sensor_pinctrl_init(
-       struct sensor_pinctrl_info *sensor_pctrl, struct device *dev)
-{
-       sensor_pctrl->pinctrl = devm_pinctrl_get(dev);
-       if (IS_ERR_OR_NULL(sensor_pctrl->pinctrl)) {
-               pr_err("Getting pinctrl handle failed\n");
-               return -EINVAL;
-       }
-
-       sensor_pctrl->reset_state_low
-               = pinctrl_lookup_state(sensor_pctrl->pinctrl, "reset_low");
-       if (IS_ERR_OR_NULL(sensor_pctrl->reset_state_low)) {
-               pr_err("Failed to get the reset_low pinctrl handle\n");
-               return -EINVAL;
-       }
-
-       sensor_pctrl->reset_state_high
-               = pinctrl_lookup_state(sensor_pctrl->pinctrl, "reset_high");
-       if (IS_ERR_OR_NULL(sensor_pctrl->reset_state_high)) {
-               pr_err("Failed to get the reset_high pinctrl handle\n");
-               return -EINVAL;
-       }
-
-       sensor_pctrl->use_pinctrl = true;
-
-       return 0;
-}
-
 static inline struct sc2235_dev *to_sc2235_dev(struct v4l2_subdev *sd)
 {
        return container_of(sd, struct sc2235_dev, sd);
@@ -969,7 +932,6 @@ static void sc2235_reset(struct sc2235_dev *sensor)
 static int sc2235_set_power_on(struct sc2235_dev *sensor)
 {
        struct i2c_client *client = sensor->i2c_client;
-       struct sensor_pinctrl_info *sensor_pctrl = &sensor->sc2235_pctrl;
        int ret;
 
        ret = clk_prepare_enable(sensor->xclk);
@@ -987,16 +949,8 @@ static int sc2235_set_power_on(struct sc2235_dev *sensor)
                goto xclk_off;
        }
 
-       if (sensor_pctrl->use_pinctrl) {
-               ret = pinctrl_select_state(
-                       sensor_pctrl->pinctrl,
-                       sensor_pctrl->reset_state_high);
-               if (ret)
-                       pr_err("cannot set reset pin to high\n");
-       } else {
-               sc2235_reset(sensor);
-               sc2235_power(sensor, true);
-       }
+       sc2235_reset(sensor);
+       sc2235_power(sensor, true);
 
        return 0;
 
@@ -1007,18 +961,7 @@ xclk_off:
 
 static void sc2235_set_power_off(struct sc2235_dev *sensor)
 {
-       struct sensor_pinctrl_info *sensor_pctrl = &sensor->sc2235_pctrl;
-       int ret;
-
-       if (sensor_pctrl->use_pinctrl) {
-               ret = pinctrl_select_state(
-                       sensor_pctrl->pinctrl,
-                       sensor_pctrl->reset_state_low);
-               if (ret)
-                       pr_err("cannot set reset pin to low\n");
-       } else {
-               sc2235_power(sensor, false);
-       }
+       sc2235_power(sensor, false);
 
        regulator_bulk_disable(SC2235_NUM_SUPPLIES, sensor->supplies);
        clk_disable_unprepare(sensor->xclk);
@@ -1605,9 +1548,7 @@ static int sc2235_enum_frame_interval(
        struct v4l2_subdev_state *state,
        struct v4l2_subdev_frame_interval_enum *fie)
 {
-       struct sc2235_dev *sensor = to_sc2235_dev(sd);
        struct v4l2_fract tpf;
-       int ret;
 
        if (fie->pad != 0)
                return -EINVAL;
@@ -1617,11 +1558,6 @@ static int sc2235_enum_frame_interval(
        tpf.numerator = 1;
        tpf.denominator = sc2235_framerates[fie->index];
 
-       // ret = sc2235_try_frame_interval(sensor, &tpf,
-       //                              fie->width, fie->height);
-       // if (ret < 0)
-       //      return -EINVAL;
-
        fie->interval = tpf;
        return 0;
 }
@@ -1887,12 +1823,15 @@ static int sc2235_probe(struct i2c_client *client)
                return -EINVAL;
        }
 
-       ret = sc2235_sensor_pinctrl_init(&sensor->sc2235_pctrl, dev);
-       if (ret) {
-               pr_err("Can't get pinctrl, use gpio to ctrl\n");
-               sensor->reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH);
-               sensor->sc2235_pctrl.use_pinctrl = false;
-       }
+       sensor->pwdn_gpio = devm_gpiod_get_optional(dev, "powerdown",
+                                               GPIOD_OUT_HIGH);
+       if (IS_ERR(sensor->pwdn_gpio))
+               return PTR_ERR(sensor->pwdn_gpio);
+
+       sensor->reset_gpio = devm_gpiod_get_optional(dev, "reset",
+                                               GPIOD_OUT_HIGH);
+       if (IS_ERR(sensor->reset_gpio))
+               return PTR_ERR(sensor->reset_gpio);
 
        v4l2_i2c_subdev_init(&sensor->sd, client, &sc2235_subdev_ops);