diff options
| -rw-r--r-- | drivers/misc/Makefile | 5 | ||||
| -rw-r--r-- | drivers/misc/mc9sdz60.c | 51 | ||||
| -rw-r--r-- | include/mc9sdz60.h | 84 | 
3 files changed, 138 insertions, 2 deletions
| diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile index a76bd4e58..b15248611 100644 --- a/drivers/misc/Makefile +++ b/drivers/misc/Makefile @@ -28,12 +28,13 @@ LIB	:= $(obj)libmisc.o  COBJS-$(CONFIG_ALI152X) += ali512x.o  COBJS-$(CONFIG_DS4510)  += ds4510.o  COBJS-$(CONFIG_FSL_LAW) += fsl_law.o +COBJS-$(CONFIG_FSL_PMIC) += fsl_pmic.o  COBJS-$(CONFIG_GPIO_LED) += gpio_led.o +COBJS-$(CONFIG_FSL_MC9SDZ60) += mc9sdz60.o  COBJS-$(CONFIG_NS87308) += ns87308.o +COBJS-$(CONFIG_PDSP188x) += pdsp188x.o  COBJS-$(CONFIG_STATUS_LED) += status_led.o  COBJS-$(CONFIG_TWL4030_LED) += twl4030_led.o -COBJS-$(CONFIG_FSL_PMIC) += fsl_pmic.o -COBJS-$(CONFIG_PDSP188x) += pdsp188x.o  COBJS	:= $(COBJS-y)  SRCS	:= $(COBJS:.o=.c) diff --git a/drivers/misc/mc9sdz60.c b/drivers/misc/mc9sdz60.c new file mode 100644 index 000000000..439d5a639 --- /dev/null +++ b/drivers/misc/mc9sdz60.c @@ -0,0 +1,51 @@ +/* + * (C) Copyright 2010 Stefano Babic <sbabic@denx.de> + * + * 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 <config.h> +#include <common.h> +#include <asm/errno.h> +#include <linux/types.h> +#include <i2c.h> +#include <mc9sdz60.h> + +#ifndef CONFIG_SYS_FSL_MC9SDZ60_I2C_ADDR +#error "You have to configure I2C address for MC9SDZ60" +#endif + + +u8 mc9sdz60_reg_read(enum mc9sdz60_reg reg) +{ +	u8 val; + +	if (i2c_read(CONFIG_SYS_FSL_MC9SDZ60_I2C_ADDR, reg, 1, &val, 1)) { +		puts("Error reading MC9SDZ60 register\n"); +		return -1; +	} + +	return val; +} + +void mc9sdz60_reg_write(enum mc9sdz60_reg reg, u8 val) +{ +	i2c_write(CONFIG_SYS_FSL_MC9SDZ60_I2C_ADDR, reg, 1, &val, 1); +} diff --git a/include/mc9sdz60.h b/include/mc9sdz60.h new file mode 100644 index 000000000..31b894cf8 --- /dev/null +++ b/include/mc9sdz60.h @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2009 Marc Kleine-Budde <mkl@pengutronix.de> + * + * Copyright 2004-2009 Freescale Semiconductor, Inc. All Rights Reserved. + * + * 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 + * + */ + +#ifndef __ASM_ARCH_MC9SDZ60_H +#define __ASM_ARCH_MC9SDZ60_H + +/** + * Register addresses for the MC9SDZ60 + * + * @note: these match those in the kernel drivers/mxc/mcu_pmic/mc9s08dz60.h + * but not include/linux/mfd/mc9s08dz60/pmic.h + * + */ +enum mc9sdz60_reg { +	MC9SDZ60_REG_VERSION		= 0x00, +	/* reserved                       0x01 */ +	MC9SDZ60_REG_SECS		= 0x02, +	MC9SDZ60_REG_MINS		= 0x03, +	MC9SDZ60_REG_HRS		= 0x04, +	MC9SDZ60_REG_DAY		= 0x05, +	MC9SDZ60_REG_DATE		= 0x06, +	MC9SDZ60_REG_MONTH		= 0x07, +	MC9SDZ60_REG_YEAR		= 0x08, +	MC9SDZ60_REG_ALARM_SECS		= 0x09, +	MC9SDZ60_REG_ALARM_MINS		= 0x0a, +	MC9SDZ60_REG_ALARM_HRS		= 0x0b, +	/* reserved                       0x0c */ +	/* reserved                       0x0d */ +	MC9SDZ60_REG_TS_CONTROL		= 0x0e, +	MC9SDZ60_REG_X_LOW		= 0x0f, +	MC9SDZ60_REG_Y_LOW		= 0x10, +	MC9SDZ60_REG_XY_HIGH		= 0x11, +	MC9SDZ60_REG_X_LEFT_LOW		= 0x12, +	MC9SDZ60_REG_X_LEFT_HIGH	= 0x13, +	MC9SDZ60_REG_X_RIGHT		= 0x14, +	MC9SDZ60_REG_Y_TOP_LOW		= 0x15, +	MC9SDZ60_REG_Y_TOP_HIGH		= 0x16, +	MC9SDZ60_REG_Y_BOTTOM		= 0x17, +	/* reserved                       0x18 */ +	/* reserved                       0x19 */ +	MC9SDZ60_REG_RESET_1		= 0x1a, +	MC9SDZ60_REG_RESET_2		= 0x1b, +	MC9SDZ60_REG_POWER_CTL		= 0x1c, +	MC9SDZ60_REG_DELAY_CONFIG	= 0x1d, +	/* reserved                       0x1e */ +	/* reserved                       0x1f */ +	MC9SDZ60_REG_GPIO_1		= 0x20, +	MC9SDZ60_REG_GPIO_2		= 0x21, +	MC9SDZ60_REG_KPD_1		= 0x22, +	MC9SDZ60_REG_KPD_2		= 0x23, +	MC9SDZ60_REG_KPD_CONTROL	= 0x24, +	MC9SDZ60_REG_INT_ENABLE_1	= 0x25, +	MC9SDZ60_REG_INT_ENABLE_2	= 0x26, +	MC9SDZ60_REG_INT_FLAG_1		= 0x27, +	MC9SDZ60_REG_INT_FLAG_2		= 0x28, +	MC9SDZ60_REG_DES_FLAG		= 0x29, +}; + +extern u8 mc9sdz60_reg_read(enum mc9sdz60_reg reg); +extern void mc9sdz60_reg_write(enum mc9sdz60_reg reg, u8 val); + +#endif /* __ASM_ARCH_MC9SDZ60_H */ |