]>
git.ipfire.org Git - people/ms/u-boot.git/blob - drivers/power/pmic/pm8916.c
2 * Qualcomm pm8916 pmic driver
4 * (C) Copyright 2015 Mateusz Kulikowski <mateusz.kulikowski@gmail.com>
6 * SPDX-License-Identifier: GPL-2.0+
11 #include <power/pmic.h>
12 #include <spmi/spmi.h>
14 DECLARE_GLOBAL_DATA_PTR
;
17 #define PID_MASK (0xFF << PID_SHIFT)
21 uint32_t usid
; /* Slave ID on SPMI bus */
24 static int pm8916_reg_count(struct udevice
*dev
)
29 static int pm8916_write(struct udevice
*dev
, uint reg
, const uint8_t *buff
,
32 struct pm8916_priv
*priv
= dev_get_priv(dev
);
37 return spmi_reg_write(dev
->parent
, priv
->usid
,
38 (reg
& PID_MASK
) >> PID_SHIFT
, reg
& REG_MASK
,
42 static int pm8916_read(struct udevice
*dev
, uint reg
, uint8_t *buff
, int len
)
44 struct pm8916_priv
*priv
= dev_get_priv(dev
);
50 val
= spmi_reg_read(dev
->parent
, priv
->usid
,
51 (reg
& PID_MASK
) >> PID_SHIFT
, reg
& REG_MASK
);
59 static struct dm_pmic_ops pm8916_ops
= {
60 .reg_count
= pm8916_reg_count
,
62 .write
= pm8916_write
,
65 static const struct udevice_id pm8916_ids
[] = {
66 { .compatible
= "qcom,spmi-pmic" },
70 static int pm8916_probe(struct udevice
*dev
)
72 struct pm8916_priv
*priv
= dev_get_priv(dev
);
74 priv
->usid
= dev_get_addr(dev
);
76 if (priv
->usid
== FDT_ADDR_T_NONE
)
83 static int pm8916_bind(struct udevice
*dev
)
85 return dm_scan_fdt_node(dev
, gd
->fdt_blob
, dev
->of_offset
, false);
88 U_BOOT_DRIVER(pmic_pm8916
) = {
89 .name
= "pmic_pm8916",
91 .of_match
= pm8916_ids
,
93 .probe
= pm8916_probe
,
95 .priv_auto_alloc_size
= sizeof(struct pm8916_priv
),