diff options
| author | Minkyu Kang <mk7.kang@samsung.com> | 2012-12-10 13:44:41 +0900 | 
|---|---|---|
| committer | Minkyu Kang <mk7.kang@samsung.com> | 2012-12-10 14:13:27 +0900 | 
| commit | 2c601c7208713ba9b2158c57adcf515f4bdbc212 (patch) | |
| tree | 9f6e70f33565beceb956b98c261bee19731d50d2 /drivers/power/power_spi.c | |
| parent | b8a7c467960ffb4d5a5e1eef5f7783fb6f594542 (diff) | |
| parent | fd4d564b3c80b111f18c93adb14233a6a7ddb0e9 (diff) | |
| download | olio-uboot-2014.01-2c601c7208713ba9b2158c57adcf515f4bdbc212.tar.xz olio-uboot-2014.01-2c601c7208713ba9b2158c57adcf515f4bdbc212.zip | |
Merge branch 'master' of git://git.denx.de/u-boot into resolve
Conflicts:
	README
	board/samsung/universal_c210/universal.c
	drivers/misc/Makefile
	drivers/power/power_fsl.c
	include/configs/mx35pdk.h
	include/configs/mx53loco.h
	include/configs/seaboard.h
Diffstat (limited to 'drivers/power/power_spi.c')
| -rw-r--r-- | drivers/power/power_spi.c | 108 | 
1 files changed, 108 insertions, 0 deletions
| diff --git a/drivers/power/power_spi.c b/drivers/power/power_spi.c new file mode 100644 index 000000000..27488ea5d --- /dev/null +++ b/drivers/power/power_spi.c @@ -0,0 +1,108 @@ +/* + * Copyright (C) 2011 Samsung Electronics + * Lukasz Majewski <l.majewski@samsung.com> + * + * (C) Copyright 2010 + * Stefano Babic, DENX Software Engineering, sbabic@denx.de + * + * (C) Copyright 2008-2009 Freescale Semiconductor, Inc. + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +#include <common.h> +#include <linux/types.h> +#include <power/pmic.h> +#include <spi.h> + +static struct spi_slave *slave; + +void pmic_spi_free(struct spi_slave *slave) +{ +	if (slave) +		spi_free_slave(slave); +} + +struct spi_slave *pmic_spi_probe(struct pmic *p) +{ +	return spi_setup_slave(p->bus, +		p->hw.spi.cs, +		p->hw.spi.clk, +		p->hw.spi.mode); +} + +static u32 pmic_reg(struct pmic *p, u32 reg, u32 *val, u32 write) +{ +	u32 pmic_tx, pmic_rx; +	u32 tmp; + +	if (!slave) { +		slave = pmic_spi_probe(p); + +		if (!slave) +			return -1; +	} + +	if (check_reg(p, reg)) +		return -1; + +	if (spi_claim_bus(slave)) +		return -1; + +	pmic_tx = p->hw.spi.prepare_tx(reg, val, write); + +	tmp = cpu_to_be32(pmic_tx); + +	if (spi_xfer(slave, pmic_spi_bitlen, &tmp, &pmic_rx, +			pmic_spi_flags)) { +		spi_release_bus(slave); +		return -1; +	} + +	if (write) { +		pmic_tx = p->hw.spi.prepare_tx(reg, val, 0); +		tmp = cpu_to_be32(pmic_tx); +		if (spi_xfer(slave, pmic_spi_bitlen, &tmp, &pmic_rx, +			pmic_spi_flags)) { +			spi_release_bus(slave); +			return -1; +		} +	} + +	spi_release_bus(slave); +	*val = cpu_to_be32(pmic_rx); + +	return 0; +} + +int pmic_reg_write(struct pmic *p, u32 reg, u32 val) +{ +	if (pmic_reg(p, reg, &val, 1)) +		return -1; + +	return 0; +} + +int pmic_reg_read(struct pmic *p, u32 reg, u32 *val) +{ +	if (pmic_reg(p, reg, val, 0)) +		return -1; + +	return 0; +} |