mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-30 22:26:55 +00:00
media: qcom: camss: Convert to per-VFE pointer for power-domain linkages
Right now we use the top-level camss structure to provide pointers via VFE id index back to genpd linkages. In effect this hard-codes VFE indexes to power-domain indexes in the dtsi and mandates a very particular ordering of power domains in the dtsi, which bears no relationship to a real hardware dependency. As a first step to rationalising the VFE power-domain code and breaking the magic indexing in dtsi use per-VFE pointers to genpd linkages. The top-level index in msm_vfe_subdev_init is still used to attain the initial so no functional or logical change arises from this change. Reviewed-by: Konrad Dybcio <konrad.dybcio@linaro.org> Tested-by: Matti Lehtimäki <matti.lehtimaki@gmail.com> Signed-off-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org> Signed-off-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
This commit is contained in:
parent
ac6494e0ca
commit
a409b3f08d
6 changed files with 29 additions and 34 deletions
|
@ -638,7 +638,7 @@ static void vfe_pm_domain_off(struct vfe_device *vfe)
|
|||
if (vfe->id >= camss->res->vfe_num)
|
||||
return;
|
||||
|
||||
device_link_del(camss->genpd_link[vfe->id]);
|
||||
device_link_del(vfe->genpd_link);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -648,16 +648,15 @@ static void vfe_pm_domain_off(struct vfe_device *vfe)
|
|||
static int vfe_pm_domain_on(struct vfe_device *vfe)
|
||||
{
|
||||
struct camss *camss = vfe->camss;
|
||||
enum vfe_line_id id = vfe->id;
|
||||
|
||||
if (id >= camss->res->vfe_num)
|
||||
if (vfe->id >= camss->res->vfe_num)
|
||||
return 0;
|
||||
|
||||
camss->genpd_link[id] = device_link_add(camss->dev, camss->genpd[id],
|
||||
DL_FLAG_STATELESS |
|
||||
DL_FLAG_PM_RUNTIME |
|
||||
DL_FLAG_RPM_ACTIVE);
|
||||
if (!camss->genpd_link[id])
|
||||
vfe->genpd_link = device_link_add(camss->dev, vfe->genpd,
|
||||
DL_FLAG_STATELESS |
|
||||
DL_FLAG_PM_RUNTIME |
|
||||
DL_FLAG_RPM_ACTIVE);
|
||||
if (!vfe->genpd_link)
|
||||
return -EINVAL;
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -1109,14 +1109,10 @@ static void vfe_isr_read(struct vfe_device *vfe, u32 *value0, u32 *value1)
|
|||
*/
|
||||
static void vfe_pm_domain_off(struct vfe_device *vfe)
|
||||
{
|
||||
struct camss *camss;
|
||||
|
||||
if (!vfe)
|
||||
return;
|
||||
|
||||
camss = vfe->camss;
|
||||
|
||||
device_link_del(camss->genpd_link[vfe->id]);
|
||||
device_link_del(vfe->genpd_link);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1126,13 +1122,12 @@ static void vfe_pm_domain_off(struct vfe_device *vfe)
|
|||
static int vfe_pm_domain_on(struct vfe_device *vfe)
|
||||
{
|
||||
struct camss *camss = vfe->camss;
|
||||
enum vfe_line_id id = vfe->id;
|
||||
|
||||
camss->genpd_link[id] = device_link_add(camss->dev, camss->genpd[id], DL_FLAG_STATELESS |
|
||||
DL_FLAG_PM_RUNTIME | DL_FLAG_RPM_ACTIVE);
|
||||
vfe->genpd_link = device_link_add(camss->dev, vfe->genpd, DL_FLAG_STATELESS |
|
||||
DL_FLAG_PM_RUNTIME | DL_FLAG_RPM_ACTIVE);
|
||||
|
||||
if (!camss->genpd_link[id]) {
|
||||
dev_err(vfe->camss->dev, "Failed to add VFE#%d to power domain\n", id);
|
||||
if (!vfe->genpd_link) {
|
||||
dev_err(vfe->camss->dev, "Failed to add VFE#%d to power domain\n", vfe->id);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
|
|
@ -1099,9 +1099,7 @@ static void vfe_isr_read(struct vfe_device *vfe, u32 *value0, u32 *value1)
|
|||
*/
|
||||
static void vfe_pm_domain_off(struct vfe_device *vfe)
|
||||
{
|
||||
struct camss *camss = vfe->camss;
|
||||
|
||||
device_link_del(camss->genpd_link[vfe->id]);
|
||||
device_link_del(vfe->genpd_link);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -1111,13 +1109,12 @@ static void vfe_pm_domain_off(struct vfe_device *vfe)
|
|||
static int vfe_pm_domain_on(struct vfe_device *vfe)
|
||||
{
|
||||
struct camss *camss = vfe->camss;
|
||||
enum vfe_line_id id = vfe->id;
|
||||
|
||||
camss->genpd_link[id] = device_link_add(camss->dev, camss->genpd[id], DL_FLAG_STATELESS |
|
||||
DL_FLAG_PM_RUNTIME | DL_FLAG_RPM_ACTIVE);
|
||||
vfe->genpd_link = device_link_add(camss->dev, vfe->genpd, DL_FLAG_STATELESS |
|
||||
DL_FLAG_PM_RUNTIME | DL_FLAG_RPM_ACTIVE);
|
||||
|
||||
if (!camss->genpd_link[id]) {
|
||||
dev_err(vfe->camss->dev, "Failed to add VFE#%d to power domain\n", id);
|
||||
if (!vfe->genpd_link) {
|
||||
dev_err(vfe->camss->dev, "Failed to add VFE#%d to power domain\n", vfe->id);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
|
|
@ -463,7 +463,7 @@ static void vfe_pm_domain_off(struct vfe_device *vfe)
|
|||
if (vfe->id >= camss->res->vfe_num)
|
||||
return;
|
||||
|
||||
device_link_del(camss->genpd_link[vfe->id]);
|
||||
device_link_del(vfe->genpd_link);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -473,16 +473,15 @@ static void vfe_pm_domain_off(struct vfe_device *vfe)
|
|||
static int vfe_pm_domain_on(struct vfe_device *vfe)
|
||||
{
|
||||
struct camss *camss = vfe->camss;
|
||||
enum vfe_line_id id = vfe->id;
|
||||
|
||||
if (id >= camss->res->vfe_num)
|
||||
if (vfe->id >= camss->res->vfe_num)
|
||||
return 0;
|
||||
|
||||
camss->genpd_link[id] = device_link_add(camss->dev, camss->genpd[id],
|
||||
DL_FLAG_STATELESS |
|
||||
DL_FLAG_PM_RUNTIME |
|
||||
DL_FLAG_RPM_ACTIVE);
|
||||
if (!camss->genpd_link[id])
|
||||
vfe->genpd_link = device_link_add(camss->dev, vfe->genpd,
|
||||
DL_FLAG_STATELESS |
|
||||
DL_FLAG_PM_RUNTIME |
|
||||
DL_FLAG_RPM_ACTIVE);
|
||||
if (!vfe->genpd_link)
|
||||
return -EINVAL;
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -1345,6 +1345,9 @@ int msm_vfe_subdev_init(struct camss *camss, struct vfe_device *vfe,
|
|||
if (!res->line_num)
|
||||
return -EINVAL;
|
||||
|
||||
if (res->has_pd)
|
||||
vfe->genpd = camss->genpd[id];
|
||||
|
||||
vfe->line_num = res->line_num;
|
||||
vfe->ops->subdev_init(dev, vfe);
|
||||
|
||||
|
|
|
@ -150,6 +150,8 @@ struct vfe_device {
|
|||
const struct vfe_hw_ops_gen1 *ops_gen1;
|
||||
struct vfe_isr_ops isr_ops;
|
||||
struct camss_video_ops video_ops;
|
||||
struct device *genpd;
|
||||
struct device_link *genpd_link;
|
||||
};
|
||||
|
||||
struct camss_subdev_resources;
|
||||
|
|
Loading…
Reference in a new issue