]>
git.ipfire.org Git - people/ms/u-boot.git/blob - drivers/power/power_spi.c
2 * Copyright (C) 2011 Samsung Electronics
3 * Lukasz Majewski <l.majewski@samsung.com>
6 * Stefano Babic, DENX Software Engineering, sbabic@denx.de
8 * (C) Copyright 2008-2009 Freescale Semiconductor, Inc.
10 * SPDX-License-Identifier: GPL-2.0+
14 #include <linux/types.h>
15 #include <power/pmic.h>
18 static struct spi_slave
*slave
;
20 void pmic_spi_free(struct spi_slave
*slave
)
23 spi_free_slave(slave
);
26 struct spi_slave
*pmic_spi_probe(struct pmic
*p
)
28 return spi_setup_slave(p
->bus
,
34 static u32
pmic_reg(struct pmic
*p
, u32 reg
, u32
*val
, u32 write
)
40 slave
= pmic_spi_probe(p
);
46 if (check_reg(p
, reg
))
49 if (spi_claim_bus(slave
))
52 pmic_tx
= p
->hw
.spi
.prepare_tx(reg
, val
, write
);
54 tmp
= cpu_to_be32(pmic_tx
);
56 if (spi_xfer(slave
, pmic_spi_bitlen
, &tmp
, &pmic_rx
,
58 spi_release_bus(slave
);
63 pmic_tx
= p
->hw
.spi
.prepare_tx(reg
, val
, 0);
64 tmp
= cpu_to_be32(pmic_tx
);
65 if (spi_xfer(slave
, pmic_spi_bitlen
, &tmp
, &pmic_rx
,
67 spi_release_bus(slave
);
72 spi_release_bus(slave
);
73 *val
= cpu_to_be32(pmic_rx
);
78 int pmic_reg_write(struct pmic
*p
, u32 reg
, u32 val
)
80 if (pmic_reg(p
, reg
, &val
, 1))
86 int pmic_reg_read(struct pmic
*p
, u32 reg
, u32
*val
)
88 if (pmic_reg(p
, reg
, val
, 0))