]>
git.ipfire.org Git - thirdparty/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+
10 #include <power/pmic.h>
11 #include <spmi/spmi.h>
13 DECLARE_GLOBAL_DATA_PTR
;
16 #define PID_MASK (0xFF << PID_SHIFT)
20 uint32_t usid
; /* Slave ID on SPMI bus */
23 static int pm8916_reg_count(struct udevice
*dev
)
28 static int pm8916_write(struct udevice
*dev
, uint reg
, const uint8_t *buff
,
31 struct pm8916_priv
*priv
= dev_get_priv(dev
);
36 return spmi_reg_write(dev
->parent
, priv
->usid
,
37 (reg
& PID_MASK
) >> PID_SHIFT
, reg
& REG_MASK
,
41 static int pm8916_read(struct udevice
*dev
, uint reg
, uint8_t *buff
, int len
)
43 struct pm8916_priv
*priv
= dev_get_priv(dev
);
49 val
= spmi_reg_read(dev
->parent
, priv
->usid
,
50 (reg
& PID_MASK
) >> PID_SHIFT
, reg
& REG_MASK
);
58 static struct dm_pmic_ops pm8916_ops
= {
59 .reg_count
= pm8916_reg_count
,
61 .write
= pm8916_write
,
64 static const struct udevice_id pm8916_ids
[] = {
65 { .compatible
= "qcom,spmi-pmic" },
69 static int pm8916_probe(struct udevice
*dev
)
71 struct pm8916_priv
*priv
= dev_get_priv(dev
);
73 priv
->usid
= dev_get_addr(dev
);
75 if (priv
->usid
== FDT_ADDR_T_NONE
)
81 U_BOOT_DRIVER(pmic_pm8916
) = {
82 .name
= "pmic_pm8916",
84 .of_match
= pm8916_ids
,
85 .bind
= dm_scan_fdt_dev
,
86 .probe
= pm8916_probe
,
88 .priv_auto_alloc_size
= sizeof(struct pm8916_priv
),