video: rockchip: mpp: update grf_info read from dtsi

Change-Id: Ie2e66ef87d76eb79a6dd34439633beb6226b0d70
Signed-off-by: Ding Wei <leo.ding@rock-chips.com>
This commit is contained in:
Ding Wei
2019-11-20 10:35:38 +08:00
committed by Tao Huang
parent ccf87a15a5
commit a211b64397
6 changed files with 48 additions and 30 deletions

View File

@@ -468,8 +468,10 @@
mpp_srv: mpp-srv {
compatible = "rockchip,mpp-service";
rockchip,taskqueue-count = <1>;
vdpu1,grf = <&grf 0x0144 0x04000400>;
vepu1,grf = <&grf 0x0144 0x04000400>;
rockchip,grf = <&grf>;
rockchip,grf-offset = <0x0144>;
rockchip,grf-values = <0x04000400>, <0x04000400>;
rockchip,grf-names = "grf_vdpu1", "grf_vepu1";
status = "disabled";
};

View File

@@ -1394,9 +1394,10 @@
mpp_srv: mpp-srv {
compatible = "rockchip,mpp-service";
rockchip,taskqueue-count = <1>;
rkvdec,grf = <&grf 0x410 0x80008000>;
vdpu2,grf = <&grf 0x410 0x80000000>;
vepu2,grf = <&grf 0x410 0x80000000>;
rockchip,grf = <&grf>;
rockchip,grf-offset = <0x0410>;
rockchip,grf-values = <0x80008000>, <0x80000000>, <0x80000000>;
rockchip,grf-names = "grf_rkvdec", "grf_vdpu2", "grf_vepu2";
status = "disabled";
};

View File

@@ -735,8 +735,10 @@
mpp_srv: mpp-srv {
compatible = "rockchip,mpp-service";
rockchip,taskqueue-count = <3>;
vepu2,grf = <&grf 0x040c 0x8000000>;
vepu22,grf = <&grf 0x040c 0x8000800>;
rockchip,grf = <&grf>;
rockchip,grf-offset = <0x040c>;
rockchip,grf-values = <0x8000000>, <0x8000800>;
rockchip,grf-names = "grf_vepu2", "grf_vepu22";
status = "disabled";
};

View File

@@ -1119,10 +1119,10 @@ int mpp_safe_unreset(struct reset_control *rst)
int mpp_set_grf(struct mpp_grf_info *grf_info)
{
if (grf_info->grf && grf_info->mode_val)
if (grf_info->grf && grf_info->val)
regmap_write(grf_info->grf,
grf_info->mode_ctrl,
grf_info->mode_val);
grf_info->offset,
grf_info->val);
return 0;
}

View File

@@ -72,8 +72,8 @@ struct mpp_request {
};
struct mpp_grf_info {
u32 mode_ctrl;
u32 mode_val;
u32 offset;
u32 val;
struct regmap *grf;
};

View File

@@ -25,6 +25,11 @@
#define MPP_CLASS_NAME "mpp_class"
#define MPP_SERVICE_NAME "mpp_service"
#define MPP_REGISTER_GRF(np, X, x) {\
if (IS_ENABLED(CONFIG_ROCKCHIP_MPP_##X))\
mpp_init_grf(np, &srv->grf_infos[MPP_DRIVER_##X], x);\
}
#define MPP_REGISTER_DRIVER(X, x) {\
if (IS_ENABLED(CONFIG_ROCKCHIP_MPP_##X))\
mpp_add_driver(MPP_DRIVER_##X, &rockchip_##x##_driver);\
@@ -38,18 +43,26 @@ static struct mpp_grf_info *mpp_grf_infos;
static struct platform_driver **mpp_sub_drivers;
static int mpp_init_grf(struct device_node *np,
const char *name,
struct mpp_grf_info *grf_info)
struct mpp_grf_info *grf_info,
const char *name)
{
grf_info->grf = syscon_regmap_lookup_by_phandle(np, name);
if (IS_ERR_OR_NULL(grf_info->grf)) {
grf_info->grf = NULL;
} else {
of_property_read_u32_index(np, name, 1,
&grf_info->mode_ctrl);
of_property_read_u32_index(np, name, 2,
&grf_info->mode_val);
}
int index;
struct regmap *grf;
grf = syscon_regmap_lookup_by_phandle(np, "rockchip,grf");
if (IS_ERR_OR_NULL(grf_info->grf))
return -EINVAL;
of_property_read_u32(np, "rockchip,grf-offset", &grf_info->offset);
index = of_property_match_string(np, "rockchip,grf-names", name);
if (index < 0)
return -ENODATA;
of_property_read_u32_index(np, "rockchip,grf-values",
index, &grf_info->val);
grf_info->grf = grf;
return 0;
}
@@ -166,14 +179,14 @@ static int mpp_service_probe(struct platform_device *pdev)
srv->task_queues[i] = queue;
}
}
MPP_REGISTER_GRF(np, RKVDEC, "grf_rkvdec");
MPP_REGISTER_GRF(np, RKVENC, "grf_rkvenc");
MPP_REGISTER_GRF(np, VEPU1, "grf_vepu1");
MPP_REGISTER_GRF(np, VDPU1, "grf_vdpu1");
MPP_REGISTER_GRF(np, VEPU2, "grf_vepu2");
MPP_REGISTER_GRF(np, VDPU2, "grf_vdpu2");
MPP_REGISTER_GRF(np, VEPU22, "grf_vepu22");
mpp_init_grf(np, "rkvdec,grf", &srv->grf_infos[MPP_DRIVER_RKVDEC]);
mpp_init_grf(np, "rkvenc,grf", &srv->grf_infos[MPP_DRIVER_RKVENC]);
mpp_init_grf(np, "vdpu1,grf", &srv->grf_infos[MPP_DRIVER_VDPU1]);
mpp_init_grf(np, "vepu1,grf", &srv->grf_infos[MPP_DRIVER_VEPU1]);
mpp_init_grf(np, "vdpu2,grf", &srv->grf_infos[MPP_DRIVER_VDPU2]);
mpp_init_grf(np, "vepu2,grf", &srv->grf_infos[MPP_DRIVER_VEPU2]);
mpp_init_grf(np, "vepu22,grf", &srv->grf_infos[MPP_DRIVER_VEPU22]);
mpp_grf_infos = srv->grf_infos;
ret = mpp_register_service(srv, MPP_SERVICE_NAME);