[U-Boot] [PATCH] misc: pmic: fix regression in pmic_fsl.c (SPI)

Stefano Babic
2011-10-19T17:15:01Z

On 10/19/2011 06:48 PM, Helmut Raiger wrote:
> This fixes write access to PMIC registers, the bug was
> introduced partly in commit 64aac65099 and in commit c9fe76dd91.
> It was tested on an i.mx31 with a mc13783.
>
> Signed-off-by: Helmut Raiger <helmut.raiger@hale.at>
> ---
> drivers/misc/pmic_fsl.c | 5 +----
> drivers/misc/pmic_spi.c | 1 -
> 2 files changed, 1 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/misc/pmic_fsl.c b/drivers/misc/pmic_fsl.c
> index b6e809a..0ff75ed 100644

Hi Helmut,

> --- a/drivers/misc/pmic_fsl.c
> +++ b/drivers/misc/pmic_fsl.c
> @@ -29,10 +29,7 @@
> #if defined(CONFIG_PMIC_SPI)
> static u32 pmic_spi_prepare_tx(u32 reg, u32 *val, u32 write)
> {
> - if ((val == NULL) && (write))
> - return *val & ~(1 << 31);
> - else
> - return (write << 31) | (reg << 25) | (*val & 0x00FFFFFF);
> + return (write << 31) | (reg << 25) | (*val & 0x00FFFFFF);
> }
> #endif
>
> diff --git a/drivers/misc/pmic_spi.c b/drivers/misc/pmic_spi.c
> index ff35377..e772884 100644
> --- a/drivers/misc/pmic_spi.c
> +++ b/drivers/misc/pmic_spi.c
> @@ -76,7 +76,6 @@ static u32 pmic_reg(struct pmic *p, u32 reg, u32 *val, u32 write)
> }
>
> if (write) {
> - pmic_tx = p->hw.spi.prepare_tx(0, NULL, write);
> pmic_tx &= ~(1 << 31);

This fixes the issue with the Freescale PMIC, but...

The new driver introduces a level of abstraction to make easier to
introduce other PMICs that are driven with SPI / I2C. For this reason,
PMIC specific code must be inside the specific driver (pmic_fsl.c) and
not in the general (pmic_core.c and pmic_spi.c). And clearing the MSB is
part of the Freescale's protocol, and for this reason should be moved
inside the prepare function.

Best regards,
Stefano Babic

--
=====================================================================
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: office@denx.de
=====================================================================