drm/panfrost: dynamically alloc regulators
We will later introduce regulators managed by OPP. Only alloc regulators when it's needed. This also help use to release the regulators only when they are allocated. Reviewed-by: Steven Price <steven.price@arm.com> Reviewed-by: Alyssa Rosenzweig <alyssa.rosenzweig@collabora.com> Signed-off-by: Clément Péron <peron.clem@gmail.com> Signed-off-by: Rob Herring <robh@kernel.org> Link: https://patchwork.freedesktop.org/patch/msgid/20200710095409.407087-10-peron.clem@gmail.com
This commit is contained in:
parent
25e247bbf8
commit
512f21227f
@ -90,9 +90,11 @@ static int panfrost_regulator_init(struct panfrost_device *pfdev)
|
||||
{
|
||||
int ret, i;
|
||||
|
||||
if (WARN(pfdev->comp->num_supplies > ARRAY_SIZE(pfdev->regulators),
|
||||
"Too many supplies in compatible structure.\n"))
|
||||
return -EINVAL;
|
||||
pfdev->regulators = devm_kcalloc(pfdev->dev, pfdev->comp->num_supplies,
|
||||
sizeof(*pfdev->regulators),
|
||||
GFP_KERNEL);
|
||||
if (!pfdev->regulators)
|
||||
return -ENOMEM;
|
||||
|
||||
for (i = 0; i < pfdev->comp->num_supplies; i++)
|
||||
pfdev->regulators[i].supply = pfdev->comp->supply_names[i];
|
||||
@ -119,8 +121,10 @@ static int panfrost_regulator_init(struct panfrost_device *pfdev)
|
||||
|
||||
static void panfrost_regulator_fini(struct panfrost_device *pfdev)
|
||||
{
|
||||
regulator_bulk_disable(pfdev->comp->num_supplies,
|
||||
pfdev->regulators);
|
||||
if (!pfdev->regulators)
|
||||
return;
|
||||
|
||||
regulator_bulk_disable(pfdev->comp->num_supplies, pfdev->regulators);
|
||||
}
|
||||
|
||||
static void panfrost_pm_domain_fini(struct panfrost_device *pfdev)
|
||||
|
@ -22,7 +22,6 @@ struct panfrost_job;
|
||||
struct panfrost_perfcnt;
|
||||
|
||||
#define NUM_JOB_SLOTS 3
|
||||
#define MAX_REGULATORS 2
|
||||
#define MAX_PM_DOMAINS 3
|
||||
|
||||
struct panfrost_features {
|
||||
@ -81,7 +80,7 @@ struct panfrost_device {
|
||||
void __iomem *iomem;
|
||||
struct clk *clock;
|
||||
struct clk *bus_clock;
|
||||
struct regulator_bulk_data regulators[MAX_REGULATORS];
|
||||
struct regulator_bulk_data *regulators;
|
||||
struct reset_control *rstc;
|
||||
/* pm_domains for devices with more than one. */
|
||||
struct device *pm_domain_devs[MAX_PM_DOMAINS];
|
||||
|
Loading…
Reference in New Issue
Block a user