On 6/20/2022 1:50 PM, Lee Jones wrote:
On Mon, 20 Jun 2022, Satya Priya Kakitapalli (Temp) wrote:
On 6/17/2022 2:27 AM, Lee Jones wrote:Then why pass 'pm8008_data' at all?
On Tue, 14 Jun 2022, Satya Priya wrote:To derefer this in the regulator driver, we need to have the pm8008_data
Use i2c_new_dummy_device() to register pm8008-regulatorSeems like abstraction for the sake of abstraction.
client present at a different address space, instead of
defining a separate DT node. This avoids calling the probe
twice for the same chip, once for each client pm8008-infra
and pm8008-regulator.
As a part of this define pm8008_regmap_init() to do regmap
init for both the clients and define pm8008_get_regmap() to
pass the regmap to the regulator driver.
Signed-off-by: Satya Priya <quic_c_skakit@xxxxxxxxxxx>
Reviewed-by: Stephen Boyd <swboyd@xxxxxxxxxxxx>
---
Changes in V15:
- None.
Changes in V14:
- None.
Changes in V13:
- None.
drivers/mfd/qcom-pm8008.c | 34 ++++++++++++++++++++++++++++++++--
include/linux/mfd/qcom_pm8008.h | 9 +++++++++
2 files changed, 41 insertions(+), 2 deletions(-)
create mode 100644 include/linux/mfd/qcom_pm8008.h
diff --git a/drivers/mfd/qcom-pm8008.c b/drivers/mfd/qcom-pm8008.c
index 569ffd50..55e2a8e 100644
--- a/drivers/mfd/qcom-pm8008.c
+++ b/drivers/mfd/qcom-pm8008.c
@@ -9,6 +9,7 @@
#include <linux/interrupt.h>
#include <linux/irq.h>
#include <linux/irqdomain.h>
+#include <linux/mfd/qcom_pm8008.h>
#include <linux/module.h>
#include <linux/of_device.h>
#include <linux/of_platform.h>
@@ -57,6 +58,7 @@ enum {
struct pm8008_data {
struct device *dev;
+ struct regmap *regulators_regmap;
int irq;
struct regmap_irq_chip_data *irq_data;
};
@@ -150,6 +152,12 @@ static struct regmap_config qcom_mfd_regmap_cfg = {
.max_register = 0xFFFF,
};
+struct regmap *pm8008_get_regmap(const struct pm8008_data *chip)
+{
+ return chip->regulators_regmap;
+}
+EXPORT_SYMBOL_GPL(pm8008_get_regmap);
Why not do the dereference inside the regulator driver?
struct definition in the qcom_pm8008 header file.
I think it doesn't look great to have only that structure in header and all
other structs and enum in the mfd driver.
There is one more option, instead of passing the pm8008_data, we could pass the pdev->dev.parent and get the pm8008 chip data directly in the pm8008_get_regmap() like below
struct regmap *pm8008_get_regmap(const struct device *dev)
{
const struct pm8008_data *chip = dev_get_drvdata(dev);
return chip->regulators_regmap;
}
EXPORT_SYMBOL_GPL(pm8008_get_regmap);
By doing this we can avoid having declaration of pm8008_data also in the header. Please let me know if this looks good.
What's preventing you from passing 'regmap'?
I didn't get what you meant here, could you please elaborate a bit?