From d2ccde1c8e90d38cee87a1b0309ad2827f3fd30d Mon Sep 17 00:00:00 2001 From: hc <hc@nodka.com> Date: Mon, 11 Dec 2023 02:45:28 +0000 Subject: [PATCH] add boot partition size --- kernel/drivers/phy/rockchip/phy-rockchip-mipi-rx.c | 65 ++++++++++++++++++++++++-------- 1 files changed, 48 insertions(+), 17 deletions(-) diff --git a/kernel/drivers/phy/rockchip/phy-rockchip-mipi-rx.c b/kernel/drivers/phy/rockchip/phy-rockchip-mipi-rx.c index 182a0fd..e80a4c1 100644 --- a/kernel/drivers/phy/rockchip/phy-rockchip-mipi-rx.c +++ b/kernel/drivers/phy/rockchip/phy-rockchip-mipi-rx.c @@ -750,6 +750,9 @@ struct v4l2_querymenu qm = { .id = V4L2_CID_LINK_FREQ, }; int ret; + if (!sensor_sd) + return -ENODEV; + link_freq = v4l2_ctrl_find(sensor_sd->ctrl_handler, V4L2_CID_LINK_FREQ); if (!link_freq) { v4l2_warn(sd, "No pixel rate control in subdev\n"); @@ -777,11 +780,16 @@ { struct mipidphy_priv *priv = to_dphy_priv(sd); struct v4l2_subdev *sensor_sd = get_remote_sensor(sd); - struct mipidphy_sensor *sensor = sd_to_sensor(priv, sensor_sd); + struct mipidphy_sensor *sensor; struct v4l2_mbus_config mbus; int ret; - ret = v4l2_subdev_call(sensor_sd, video, g_mbus_config, &mbus); + if (!sensor_sd) + return -ENODEV; + sensor = sd_to_sensor(priv, sensor_sd); + if (!sensor) + return -ENODEV; + ret = v4l2_subdev_call(sensor_sd, pad, get_mbus_config, 0, &mbus); if (ret) return ret; @@ -899,7 +907,7 @@ return -EINVAL; } -static int mipidphy_g_mbus_config(struct v4l2_subdev *sd, +static int mipidphy_g_mbus_config(struct v4l2_subdev *sd, unsigned int pad_id, struct v4l2_mbus_config *config) { struct mipidphy_priv *priv = to_dphy_priv(sd); @@ -909,6 +917,8 @@ if (!sensor_sd) return -ENODEV; sensor = sd_to_sensor(priv, sensor_sd); + if (!sensor) + return -ENODEV; mipidphy_update_sensor_mbus(sd); *config = sensor->mbus; @@ -925,7 +935,7 @@ return pm_runtime_put(priv->dev); } -static int mipidphy_runtime_suspend(struct device *dev) +static int __maybe_unused mipidphy_runtime_suspend(struct device *dev) { struct media_entity *me = dev_get_drvdata(dev); struct v4l2_subdev *sd = media_entity_to_v4l2_subdev(me); @@ -940,7 +950,7 @@ return 0; } -static int mipidphy_runtime_resume(struct device *dev) +static int __maybe_unused mipidphy_runtime_resume(struct device *dev) { struct media_entity *me = dev_get_drvdata(dev); struct v4l2_subdev *sd = media_entity_to_v4l2_subdev(me); @@ -970,13 +980,16 @@ { struct mipidphy_priv *priv = to_dphy_priv(sd); struct v4l2_subdev *sensor_sd = get_remote_sensor(sd); - struct mipidphy_sensor *sensor = sd_to_sensor(priv, sensor_sd); + struct mipidphy_sensor *sensor; int ret; /* * Do not allow format changes and just relay whatever * set currently in the sensor. */ if (!sensor_sd) + return -ENODEV; + sensor = sd_to_sensor(priv, sensor_sd); + if (!sensor) return -ENODEV; ret = v4l2_subdev_call(sensor_sd, pad, get_fmt, NULL, fmt); if (!ret && fmt->pad == 0) @@ -997,6 +1010,7 @@ .set_fmt = mipidphy_get_set_fmt, .get_fmt = mipidphy_get_set_fmt, .get_selection = mipidphy_get_selection, + .get_mbus_config = mipidphy_g_mbus_config, }; static const struct v4l2_subdev_core_ops mipidphy_core_ops = { @@ -1005,7 +1019,6 @@ static const struct v4l2_subdev_video_ops mipidphy_video_ops = { .g_frame_interval = mipidphy_g_frame_interval, - .g_mbus_config = mipidphy_g_mbus_config, .s_stream = mipidphy_s_stream, }; @@ -1146,11 +1159,17 @@ struct v4l2_subdev *sd) { struct v4l2_subdev *sensor_sd = get_remote_sensor(sd); - struct mipidphy_sensor *sensor = sd_to_sensor(priv, sensor_sd); + struct mipidphy_sensor *sensor; const struct dphy_drv_data *drv_data = priv->drv_data; const struct hsfreq_range *hsfreq_ranges = drv_data->hsfreq_ranges; int num_hsfreq_ranges = drv_data->num_hsfreq_ranges; int i, hsfreq = 0; + + if (!sensor_sd) + return -ENODEV; + sensor = sd_to_sensor(priv, sensor_sd); + if (!sensor) + return -ENODEV; for (i = 0; i < num_hsfreq_ranges; i++) { if (hsfreq_ranges[i].range_h >= priv->data_rate_mbps) { @@ -1237,11 +1256,17 @@ struct v4l2_subdev *sd) { struct v4l2_subdev *sensor_sd = get_remote_sensor(sd); - struct mipidphy_sensor *sensor = sd_to_sensor(priv, sensor_sd); + struct mipidphy_sensor *sensor; const struct dphy_drv_data *drv_data = priv->drv_data; const struct hsfreq_range *hsfreq_ranges = drv_data->hsfreq_ranges; int num_hsfreq_ranges = drv_data->num_hsfreq_ranges; int i, hsfreq = 0; + + if (!sensor_sd) + return -ENODEV; + sensor = sd_to_sensor(priv, sensor_sd); + if (!sensor) + return -ENODEV; for (i = 0; i < num_hsfreq_ranges; i++) { if (hsfreq_ranges[i].range_h >= priv->data_rate_mbps) { @@ -1356,13 +1381,19 @@ struct v4l2_subdev *sd) { struct v4l2_subdev *sensor_sd = get_remote_sensor(sd); - struct mipidphy_sensor *sensor = sd_to_sensor(priv, sensor_sd); + struct mipidphy_sensor *sensor; const struct dphy_drv_data *drv_data = priv->drv_data; const struct hsfreq_range *hsfreq_ranges = drv_data->hsfreq_ranges; int num_hsfreq_ranges = drv_data->num_hsfreq_ranges; int i, hsfreq = 0; u32 val = 0; u32 clk_mode = 0x03; + + if (!sensor_sd) + return -ENODEV; + sensor = sd_to_sensor(priv, sensor_sd); + if (!sensor) + return -ENODEV; write_grf_reg(priv, GRF_DVP_V18SEL, 0x1); @@ -1378,7 +1409,7 @@ write_csiphy_reg(priv, CSIPHY_CTRL_PWRCTL, 0xe0); usleep_range(500, 1000); - if (sensor->mbus.type == V4L2_MBUS_CSI2) { + if (sensor->mbus.type == V4L2_MBUS_CSI2_DPHY) { /* Reset dphy digital part */ write_csiphy_reg(priv, CSIPHY_CTRL_DIG_RST, 0x1e); write_csiphy_reg(priv, CSIPHY_CTRL_DIG_RST, 0x1f); @@ -1652,7 +1683,8 @@ notifier); struct mipidphy_sensor *sensor = sd_to_sensor(priv, sd); - sensor->sd = NULL; + if (sensor) + sensor->sd = NULL; } static const struct @@ -1674,8 +1706,8 @@ return -EINVAL; } - if (vep->bus_type == V4L2_MBUS_CSI2) { - config->type = V4L2_MBUS_CSI2; + if (vep->bus_type == V4L2_MBUS_CSI2_DPHY) { + config->type = V4L2_MBUS_CSI2_DPHY; config->flags = vep->bus.mipi_csi2.flags; s_asd->lanes = vep->bus.mipi_csi2.num_data_lanes; } else if (vep->bus_type == V4L2_MBUS_CCP2) { @@ -1721,15 +1753,14 @@ if (ret < 0) return ret; + v4l2_async_notifier_init(&priv->notifier); + ret = v4l2_async_notifier_parse_fwnode_endpoints_by_port( priv->dev, &priv->notifier, sizeof(struct sensor_async_subdev), 0, rockchip_mipidphy_fwnode_parse); if (ret < 0) return ret; - - if (!priv->notifier.num_subdevs) - return -ENODEV; /* no endpoint */ priv->sd.subdev_notifier = &priv->notifier; priv->notifier.ops = &rockchip_mipidphy_async_ops; -- Gitblit v1.6.2