2 * Copyright (C) 2011 Samsung Electronics
3 * Lukasz Majewski <l.majewski@samsung.com>
5 * SPDX-License-Identifier: GPL-2.0+
10 #include <power/pmic.h>
14 #if defined(CONFIG_POWER_FSL_MC13892)
15 #define FSL_PMIC_I2C_LENGTH 3
16 #elif defined(CONFIG_POWER_FSL_MC34704)
17 #define FSL_PMIC_I2C_LENGTH 1
20 #if defined(CONFIG_POWER_SPI)
21 static u32
pmic_spi_prepare_tx(u32 reg
, u32
*val
, u32 write
)
23 return (write
<< 31) | (reg
<< 25) | (*val
& 0x00FFFFFF);
27 int pmic_init(unsigned char bus
)
29 static const char name
[] = "FSL_PMIC";
30 struct pmic
*p
= pmic_alloc();
33 printf("%s: POWER allocation error!\n", __func__
);
38 p
->number_of_regs
= PMIC_NUM_OF_REGS
;
41 #if defined(CONFIG_POWER_SPI)
42 p
->interface
= PMIC_SPI
;
43 p
->hw
.spi
.cs
= CONFIG_FSL_PMIC_CS
;
44 p
->hw
.spi
.clk
= CONFIG_FSL_PMIC_CLK
;
45 p
->hw
.spi
.mode
= CONFIG_FSL_PMIC_MODE
;
46 p
->hw
.spi
.bitlen
= CONFIG_FSL_PMIC_BITLEN
;
47 p
->hw
.spi
.flags
= SPI_XFER_BEGIN
| SPI_XFER_END
;
48 p
->hw
.spi
.prepare_tx
= pmic_spi_prepare_tx
;
49 #elif defined(CONFIG_POWER_I2C)
50 p
->interface
= PMIC_I2C
;
51 p
->hw
.i2c
.addr
= CONFIG_SYS_FSL_PMIC_I2C_ADDR
;
52 p
->hw
.i2c
.tx_num
= FSL_PMIC_I2C_LENGTH
;
54 #error "You must select CONFIG_POWER_SPI or CONFIG_POWER_I2C"