aboutsummaryrefslogtreecommitdiff
path: root/include/linux
diff options
context:
space:
mode:
Diffstat (limited to 'include/linux')
-rw-r--r--include/linux/mfd/pcf50606/adc.h87
-rw-r--r--include/linux/mfd/pcf50606/core.h163
-rw-r--r--include/linux/mfd/pcf50606/gpo.h43
-rw-r--r--include/linux/mfd/pcf50606/input.h37
-rw-r--r--include/linux/mfd/pcf50606/led.h22
-rw-r--r--include/linux/mfd/pcf50606/mbc.h53
-rw-r--r--include/linux/mfd/pcf50606/pmic.h82
-rw-r--r--include/linux/mfd/pcf50606/rtc.h43
-rw-r--r--include/linux/mfd/pcf50606/wdt.h32
9 files changed, 562 insertions, 0 deletions
diff --git a/include/linux/mfd/pcf50606/adc.h b/include/linux/mfd/pcf50606/adc.h
new file mode 100644
index 00000000000..1cb8cab70ce
--- /dev/null
+++ b/include/linux/mfd/pcf50606/adc.h
@@ -0,0 +1,87 @@
+/*
+ * adc.h -- Driver for NXP PCF50606 ADC
+ *
+ * (C) 2006-2008 by Openmoko, Inc.
+ * All rights reserved.
+ *
+ * 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.
+ */
+
+#ifndef __LINUX_MFD_PCF50606_ADC_H
+#define __LINUX_MFD_PCF50606_ADC_H
+
+#include <linux/platform_device.h>
+
+/* ADC Registers */
+#define PCF50606_REG_ADCC1 0x2e
+#define PCF50606_REG_ADCC2 0x2f
+#define PCF50606_REG_ADCS1 0x30
+#define PCF50606_REG_ADCS2 0x31
+#define PCF50606_REG_ADCS3 0x32
+
+#define PCF50606_ADCC1_TSCMODACT 0x01
+#define PCF50606_ADCC1_TSCMODSTB 0x02
+#define PCF50606_ADCC1_TRATSET 0x04
+#define PCF50606_ADCC1_NTCSWAPE 0x08
+#define PCF50606_ADCC1_NTCSWAOFF 0x10
+#define PCF50606_ADCC1_EXTSYNCBREAK 0x20
+ /* reserved */
+#define PCF50606_ADCC1_TSCINT 0x80
+
+#define PCF50606_ADCC2_ADCSTART 0x01
+ /* see enum pcf50606_adcc2_adcmux */
+#define PCF50606_ADCC2_SYNC_NONE 0x00
+#define PCF50606_ADCC2_SYNC_TXON 0x20
+#define PCF50606_ADCC2_SYNC_PWREN1 0x40
+#define PCF50606_ADCC2_SYNC_PWREN2 0x60
+#define PCF50606_ADCC2_RES_10BIT 0x00
+#define PCF50606_ADCC2_RES_8BIT 0x80
+
+#define PCF50606_ADCC2_ADCMUX_MASK (0xf << 1)
+
+#define ADCMUX_SHIFT 1
+#define PCF50606_ADCMUX_BATVOLT_RES (0x0 << ADCMUX_SHIFT)
+#define PCF50606_ADCMUX_BATVOLT_SUBTR (0x1 << ADCMUX_SHIFT)
+#define PCF50606_ADCMUX_ADCIN1_RES (0x2 << ADCMUX_SHIFT)
+#define PCF50606_ADCMUX_ADCIN1_SUBTR (0x3 << ADCMUX_SHIFT)
+#define PCF50606_ADCMUX_BATTEMP (0x4 << ADCMUX_SHIFT)
+#define PCF50606_ADCMUX_ADCIN2 (0x5 << ADCMUX_SHIFT)
+#define PCF50606_ADCMUX_ADCIN3 (0x6 << ADCMUX_SHIFT)
+#define PCF50606_ADCMUX_ADCIN3_RATIO (0x7 << ADCMUX_SHIFT)
+#define PCF50606_ADCMUX_XPOS (0x8 << ADCMUX_SHIFT)
+#define PCF50606_ADCMUX_YPOS (0x9 << ADCMUX_SHIFT)
+#define PCF50606_ADCMUX_P1 (0xa << ADCMUX_SHIFT)
+#define PCF50606_ADCMUX_P2 (0xb << ADCMUX_SHIFT)
+#define PCF50606_ADCMUX_BATVOLT_ADCIN1 (0xc << ADCMUX_SHIFT)
+#define PCF50606_ADCMUX_XY_SEQUENCE (0xe << ADCMUX_SHIFT)
+#define PCF50606_P1_P2_RESISTANCE (0xf << ADCMUX_SHIFT)
+
+#define PCF50606_ADCS2_ADCRDY 0x80
+
+struct pcf50606;
+
+#define PCF50606_MAX_ADC_FIFO_DEPTH 8
+
+struct pcf50606_adc_request;
+
+struct pcf50606_adc {
+ struct platform_device *pdev;
+
+ /* Private stuff */
+ struct pcf50606_adc_request *queue[PCF50606_MAX_ADC_FIFO_DEPTH];
+ int queue_head;
+ int queue_tail;
+ struct mutex queue_mutex;
+};
+
+extern int
+pcf50606_adc_async_read(struct pcf50606 *pcf, int mux, int avg,
+ void (*callback)(struct pcf50606 *, void *, int),
+ void *callback_param);
+extern int
+pcf50606_adc_sync_read(struct pcf50606 *pcf, int mux, int avg);
+
+#endif /* __LINUX_PCF50606_ADC_H */
diff --git a/include/linux/mfd/pcf50606/core.h b/include/linux/mfd/pcf50606/core.h
new file mode 100644
index 00000000000..b45d7ebc137
--- /dev/null
+++ b/include/linux/mfd/pcf50606/core.h
@@ -0,0 +1,163 @@
+/*
+ * core.h -- Core driver for NXP PCF50606
+ *
+ * (C) 2006-2008 by Openmoko, Inc.
+ * All rights reserved.
+ *
+ * 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.
+ */
+
+#ifndef __LINUX_MFD_PCF50606_CORE_H
+#define __LINUX_MFD_PCF50606_CORE_H
+
+#include <linux/i2c.h>
+#include <linux/workqueue.h>
+#include <linux/regulator/driver.h>
+#include <linux/regulator/machine.h>
+#include <linux/power_supply.h>
+
+#include <linux/mfd/pcf50606/pmic.h>
+#include <linux/mfd/pcf50606/input.h>
+#include <linux/mfd/pcf50606/mbc.h>
+#include <linux/mfd/pcf50606/rtc.h>
+#include <linux/mfd/pcf50606/adc.h>
+#include <linux/mfd/pcf50606/wdt.h>
+
+struct pcf50606;
+
+struct pcf50606_platform_data {
+ struct regulator_init_data reg_init_data[PCF50606_NUM_REGULATORS];
+
+ char **batteries;
+ int num_batteries;
+
+ /* Callbacks */
+ void (*probe_done)(struct pcf50606 *);
+ void (*mbc_event_callback)(struct pcf50606 *, int);
+ void (*regulator_registered)(struct pcf50606 *, int);
+ void (*force_shutdown)(struct pcf50606 *);
+
+ u8 resumers[3];
+
+ /* Runtime data - filled by driver afer probe */
+ struct pcf50606 *pcf;
+};
+
+struct pcf50606_irq {
+ void (*handler)(struct pcf50606 *, int, void *);
+ void *data;
+};
+
+int pcf50606_irq_mask(struct pcf50606 *pcf, int irq);
+int pcf50606_irq_unmask(struct pcf50606 *pcf, int irq);
+int pcf50606_irq_mask_get(struct pcf50606 *pcf, int irq);
+
+int pcf50606_read_block(struct pcf50606 *, u8 reg,
+ int nr_regs, u8 *data);
+int pcf50606_write_block(struct pcf50606 *pcf, u8 reg,
+ int nr_regs, u8 *data);
+u8 pcf50606_reg_read(struct pcf50606 *, u8 reg);
+int pcf50606_reg_write(struct pcf50606 *pcf, u8 reg, u8 val);
+
+int pcf50606_reg_set_bit_mask(struct pcf50606 *pcf, u8 reg, u8 mask, u8 val);
+int pcf50606_reg_clear_bits(struct pcf50606 *pcf, u8 reg, u8 bits);
+
+/* Interrupt registers */
+
+#define PCF50606_REG_INT1 0x02
+#define PCF50606_REG_INT2 0x03
+#define PCF50606_REG_INT3 0x04
+
+#define PCF50606_REG_INT1M 0x05
+#define PCF50606_REG_INT2M 0x06
+#define PCF50606_REG_INT3M 0x07
+
+enum {
+ /* Chip IRQs */
+ PCF50606_IRQ_ONKEYR,
+ PCF50606_IRQ_ONKEYF,
+ PCF50606_IRQ_ONKEY1S,
+ PCF50606_IRQ_EXTONR,
+ PCF50606_IRQ_EXTONF,
+ PCF50606_IRQ_SECOND,
+ PCF50606_IRQ_ALARM,
+ PCF50606_IRQ_CHGINS,
+ PCF50606_IRQ_CHGRM,
+ PCF50606_IRQ_CHGFOK,
+ PCF50606_IRQ_CHGERR,
+ PCF50606_IRQ_CHGFRDY,
+ PCF50606_IRQ_CHGPROT,
+ PCF50606_IRQ_CHGWD10S,
+ PCF50606_IRQ_CHGWDEXP,
+ PCF50606_IRQ_ADCRDY,
+ PCF50606_IRQ_ACDINS,
+ PCF50606_IRQ_ACDREM,
+ PCF50606_IRQ_TSCPRES,
+ PCF50606_IRQ_LOWBAT,
+ PCF50606_IRQ_HIGHTMP,
+
+ /* Always last */
+ PCF50606_NUM_IRQ,
+};
+
+struct pcf50606 {
+ struct device *dev;
+ struct i2c_client *i2c_client;
+
+ struct pcf50606_platform_data *pdata;
+ int irq;
+ struct pcf50606_irq irq_handler[PCF50606_NUM_IRQ];
+ struct work_struct irq_work;
+ struct mutex lock;
+
+ u8 mask_regs[3];
+
+ u8 suspend_irq_masks[3];
+ u8 resume_reason[3];
+ int is_suspended;
+
+ int onkey1s_held;
+
+ struct pcf50606_pmic pmic;
+ struct pcf50606_input input;
+ struct pcf50606_mbc mbc;
+ struct pcf50606_rtc rtc;
+ struct pcf50606_adc adc;
+ struct pcf50606_wdt wdt;
+};
+
+enum pcf50606_reg_int1 {
+ PCF50606_INT1_ONKEYR = 0x01, /* ONKEY rising edge */
+ PCF50606_INT1_ONKEYF = 0x02, /* ONKEY falling edge */
+ PCF50606_INT1_ONKEY1S = 0x04, /* OMKEY at least 1sec low */
+ PCF50606_INT1_EXTONR = 0x08, /* EXTON rising edge */
+ PCF50606_INT1_EXTONF = 0x10, /* EXTON falling edge */
+ PCF50606_INT1_SECOND = 0x40, /* RTC periodic second interrupt */
+ PCF50606_INT1_ALARM = 0x80, /* RTC alarm time is reached */
+};
+
+enum pcf50606_reg_int2 {
+ PCF50606_INT2_CHGINS = 0x01, /* Charger inserted */
+ PCF50606_INT2_CHGRM = 0x02, /* Charger removed */
+ PCF50606_INT2_CHGFOK = 0x04, /* Fast charging OK */
+ PCF50606_INT2_CHGERR = 0x08, /* Error in charging mode */
+ PCF50606_INT2_CHGFRDY = 0x10, /* Fast charge completed */
+ PCF50606_INT2_CHGPROT = 0x20, /* Charging protection interrupt */
+ PCF50606_INT2_CHGWD10S = 0x40, /* Charger watchdig expires in 10s */
+ PCF50606_INT2_CHGWDEXP = 0x80, /* Charger watchdog expires */
+};
+
+enum pcf50606_reg_int3 {
+ PCF50606_INT3_ADCRDY = 0x01, /* ADC conversion finished */
+ PCF50606_INT3_ACDINS = 0x02, /* Accessory inserted */
+ PCF50606_INT3_ACDREM = 0x04, /* Accessory removed */
+ PCF50606_INT3_TSCPRES = 0x08, /* Touch screen pressed */
+ PCF50606_INT3_LOWBAT = 0x40, /* Low battery voltage */
+ PCF50606_INT3_HIGHTMP = 0x80, /* High temperature */
+};
+
+#endif
+
diff --git a/include/linux/mfd/pcf50606/gpo.h b/include/linux/mfd/pcf50606/gpo.h
new file mode 100644
index 00000000000..fc512288635
--- /dev/null
+++ b/include/linux/mfd/pcf50606/gpo.h
@@ -0,0 +1,43 @@
+/*
+ * gpo.h -- GPO driver for NXP PCF50606
+ *
+ * (C) 2006-2008 by Openmoko, Inc.
+ * All rights reserved.
+ *
+ * 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.
+ */
+
+#ifndef __LINUX_MFD_PCF50606_GPO_H
+#define __LINUX_MFD_PCF50606_GPO_H
+
+#define PCF50606_REG_GPOC1 0x38
+#define PCF50606_REG_GPOC2 0x39
+#define PCF50606_REG_GPOC3 0x3a
+#define PCF50606_REG_GPOC4 0x3b
+#define PCF50606_REG_GPOC5 0x3c
+
+#define PCF50606_GPO1 PCF50606_REG_GPOC1
+#define PCF50606_GPO2 PCF50606_REG_GPOC1
+#define PCF50606_GPOOD1 PCF50606_REG_GPOC2
+#define PCF50606_GPOOD2 PCF50606_REG_GPOC3
+#define PCF50606_GPOOD3 PCF50606_REG_GPOC4
+#define PCF50606_GPOOD4 PCF50606_REG_GPOC5
+
+#define PCF50606_GPOCFG_GPOSEL_MASK 0x07
+
+struct pcf50606;
+
+void pcf50606_gpo_set_active(struct pcf50606 *pcf, int gpo, int value);
+int pcf50606_gpo_get_active(struct pcf50606 *pcf, int gpo);
+void pcf50606_gpo_set_standby(struct pcf50606 *pcf, int gpo, int value);
+int pcf50606_gpo_get_standby(struct pcf50606 *pcf, int gpo);
+
+void pcf50606_gpo_invert_set(struct pcf50606 *, int gpo, int invert);
+int pcf50606_gpo_invert_get(struct pcf50606 *pcf, int gpo);
+
+#endif /* __LINUX_MFD_PCF50606_GPIO_H */
+
+
diff --git a/include/linux/mfd/pcf50606/input.h b/include/linux/mfd/pcf50606/input.h
new file mode 100644
index 00000000000..85a8602c2b6
--- /dev/null
+++ b/include/linux/mfd/pcf50606/input.h
@@ -0,0 +1,37 @@
+/*
+ * input.h -- Input driver for NXP PCF50606
+ *
+ * (C) 2006-2008 by Openmoko, Inc.
+ * All rights reserved.
+ *
+ * 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.
+ */
+
+#ifndef __LINUX_MFD_PCF50606_INPUT_H
+#define __LINUX_MFD_PCF50606_INPUT_H
+
+#include <linux/platform_device.h>
+#include <linux/input.h>
+
+#define PFC50606_OOCS_ONKEY 0x01
+#define PCF50606_OOCS_EXTON 0x02
+
+#define PCF50606_OOCC2_ONKEYDB_NONE 0x00
+#define PCF50606_OOCC2_ONKEYDB_14ms 0x01
+#define PCF50606_OOCC2_ONKEYDB_62ms 0x02
+#define PCF50606_OOCC2_ONKEYDB_500ms 0x03
+#define PCF50606_OOCC2_EXTONDB_NONE 0x00
+#define PCF50606_OOCC2_EXTONDB_14ms 0x04
+#define PCF50606_OOCC2_EXTONDB_62ms 0x08
+#define PCF50606_OOCC2_EXTONDB_500ms 0x0c
+
+struct pcf50606_input {
+ struct input_dev *input_dev;
+ struct platform_device *pdev;
+};
+
+#endif
+
diff --git a/include/linux/mfd/pcf50606/led.h b/include/linux/mfd/pcf50606/led.h
new file mode 100644
index 00000000000..acc428bbaaa
--- /dev/null
+++ b/include/linux/mfd/pcf50606/led.h
@@ -0,0 +1,22 @@
+/*
+ * led.h -- LED driver for NXP PCF50606
+ *
+ * (C) 2006-2008 by Openmoko, Inc.
+ * All rights reserved.
+ *
+ * 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.
+ */
+
+#ifndef __LINUX_MFD_PCF50606_LED_H
+#define __LINUX_MFD_PCF50606_LED_H
+
+#define PCF50606_REG_LEDC1 0x36
+#define PCF50606_REG_LEDC2 0x37
+
+#include <linux/platform_device.h>
+
+#endif
+
diff --git a/include/linux/mfd/pcf50606/mbc.h b/include/linux/mfd/pcf50606/mbc.h
new file mode 100644
index 00000000000..d4a6b0f6b27
--- /dev/null
+++ b/include/linux/mfd/pcf50606/mbc.h
@@ -0,0 +1,53 @@
+/*
+ * mbc.h -- Driver for NXP PCF50606 Main Battery Charger
+ *
+ * (C) 2006-2008 by Openmoko, Inc.
+ * All rights reserved.
+ *
+ * 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.
+ */
+
+#ifndef __LINUX_MFD_PCF50606_MBC_H
+#define __LINUX_MFD_PCF50606_MBC_H
+
+#include <linux/platform_device.h>
+
+#define PCF50606_REG_MBCC1 0x29
+#define PCF50606_REG_MBCC2 0x2a
+#define PCF50606_REG_MBCC3 0x2b
+#define PCF50606_REG_MBCS1 0x2c
+
+enum pcf50606_reg_mbcc1 {
+ PCF50606_MBCC1_CHGAPE = 0x01,
+ PCF50606_MBCC1_AUTOFST = 0x02,
+#define PCF50606_MBCC1_CHGMOD_MASK 0x1c
+#define PCF50606_MBCC1_CHGMOD_SHIFT 2
+ PCF50606_MBCC1_CHGMOD_QUAL = 0x00,
+ PCF50606_MBCC1_CHGMOD_PRE = 0x04,
+ PCF50606_MBCC1_CHGMOD_TRICKLE = 0x08,
+ PCF50606_MBCC1_CHGMOD_FAST_CCCV = 0x0c,
+ PCF50606_MBCC1_CHGMOD_FAST_NOCC = 0x10,
+ PCF50606_MBCC1_CHGMOD_FAST_NOCV = 0x14,
+ PCF50606_MBCC1_CHGMOD_FAST_SW = 0x18,
+ PCF50606_MBCC1_CHGMOD_IDLE = 0x1c,
+ PCF50606_MBCC1_DETMOD_LOWCHG = 0x20,
+ PCF50606_MBCC1_DETMOD_WDRST = 0x40,
+};
+
+struct pcf50606;
+
+void pcf50606_mbc_usb_curlim_set(struct pcf50606 *pcf, int ma);
+
+struct pcf50606_mbc {
+ int charger_online;
+ int charger_active;
+
+ struct power_supply charger;
+
+ struct platform_device *pdev;
+};
+#endif
+
diff --git a/include/linux/mfd/pcf50606/pmic.h b/include/linux/mfd/pcf50606/pmic.h
new file mode 100644
index 00000000000..3b17e738b8a
--- /dev/null
+++ b/include/linux/mfd/pcf50606/pmic.h
@@ -0,0 +1,82 @@
+#ifndef __LINUX_MFD_PCF50606_PMIC_H
+#define __LINUX_MFD_PCF50606_PMIC_H
+
+#include <linux/platform_device.h>
+
+#define PCF50606_REG_DCDC1 0x1b
+#define PCF50606_REG_DCDC2 0x1c
+#define PCF50606_REG_DCDC3 0x1d
+#define PCF50606_REG_DCDC4 0x1e
+#define PCF50606_REG_DCDEC1 0x1f
+#define PCF50606_REG_DCDEC2 0x20
+#define PCF50606_REG_DCUDC1 0x21
+#define PCF50606_REG_DCUDC2 0x22
+#define PCF50606_REG_IOREGC 0x23
+#define PCF50606_REG_D1REGC1 0x24
+#define PCF50606_REG_D2REGC1 0x25
+#define PCF50606_REG_D3REGC1 0x26
+#define PCF50606_REG_LPREGC1 0x27
+#define PCF50606_REG_LPREGC2 0x28
+
+/* used by PSSC, PWROKM, PWROKS, */
+enum pcf50606_regu {
+ PCF50606_REGU_DCD = 0x01, /* DCD in phase 2 */
+ PCF50606_REGU_DCDE = 0x02, /* DCDE in phase 2 */
+ PCF50606_REGU_DCUD = 0x04, /* DCDU in phase 2 */
+ PCF50606_REGU_IO = 0x08, /* IO in phase 2 */
+ PCF50606_REGU_D1 = 0x10, /* D1 in phase 2 */
+ PCF50606_REGU_D2 = 0x20, /* D2 in phase 2 */
+ PCF50606_REGU_D3 = 0x40, /* D3 in phase 2 */
+ PCF50606_REGU_LP = 0x80, /* LP in phase 2 */
+};
+
+enum pcf50606_reg_dcdc4 {
+ PCF50606_DCDC4_MODE_AUTO = 0x00,
+ PCF50606_DCDC4_MODE_PWM = 0x01,
+ PCF50606_DCDC4_MODE_PCF = 0x02,
+ PCF50606_DCDC4_OFF_FLOAT = 0x00,
+ PCF50606_DCDC4_OFF_BYPASS = 0x04,
+ PCF50606_DCDC4_OFF_PULLDOWN = 0x08,
+ PCF50606_DCDC4_CURLIM_500mA = 0x00,
+ PCF50606_DCDC4_CURLIM_750mA = 0x10,
+ PCF50606_DCDC4_CURLIM_1000mA = 0x20,
+ PCF50606_DCDC4_CURLIM_1250mA = 0x30,
+ PCF50606_DCDC4_TOGGLE = 0x40,
+ PCF50606_DCDC4_REGSEL_DCDC2 = 0x80,
+};
+
+enum pcf50606_reg_dcdec2 {
+ PCF50606_DCDEC2_MODE_AUTO = 0x00,
+ PCF50606_DCDEC2_MODE_PWM = 0x01,
+ PCF50606_DCDEC2_MODE_PCF = 0x02,
+ PCF50606_DCDEC2_OFF_FLOAT = 0x00,
+ PCF50606_DCDEC2_OFF_BYPASS = 0x04,
+};
+
+enum pcf50606_reg_dcudc2 {
+ PCF50606_DCUDC2_MODE_AUTO = 0x00,
+ PCF50606_DCUDC2_MODE_PWM = 0x01,
+ PCF50606_DCUDC2_MODE_PCF = 0x02,
+ PCF50606_DCUDC2_OFF_FLOAT = 0x00,
+ PCF50606_DCUDC2_OFF_BYPASS = 0x04,
+};
+
+enum pcf50606_regulator_id {
+ PCF50606_REGULATOR_DCD,
+ PCF50606_REGULATOR_DCDE,
+ PCF50606_REGULATOR_DCUD,
+ PCF50606_REGULATOR_D1REG,
+ PCF50606_REGULATOR_D2REG,
+ PCF50606_REGULATOR_D3REG,
+ PCF50606_REGULATOR_LPREG,
+ PCF50606_REGULATOR_IOREG,
+
+ /* Always last */
+ PCF50606_NUM_REGULATORS
+};
+
+struct pcf50606_pmic {
+ struct platform_device *pdev[PCF50606_NUM_REGULATORS];
+};
+#endif
+
diff --git a/include/linux/mfd/pcf50606/rtc.h b/include/linux/mfd/pcf50606/rtc.h
new file mode 100644
index 00000000000..d025710ca0f
--- /dev/null
+++ b/include/linux/mfd/pcf50606/rtc.h
@@ -0,0 +1,43 @@
+/*
+ * rtc.h -- RTC driver for NXP PCF50606
+ *
+ * (C) 2006-2008 by Openmoko, Inc.
+ * All rights reserved.
+ *
+ * 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.
+ */
+
+#ifndef __LINUX_MFD_PCF50606_RTC_H
+#define __LINUX_MFD_PCF50606_RTC_H
+
+#include <linux/rtc.h>
+#include <linux/platform_device.h>
+
+#define PCF50606_REG_RTCSC 0x0a /* Second */
+#define PCF50606_REG_RTCMN 0x0b /* Minute */
+#define PCF50606_REG_RTCHR 0x0c /* Hour */
+#define PCF50606_REG_RTCWD 0x0d /* Weekday */
+#define PCF50606_REG_RTCDT 0x0e /* Day */
+#define PCF50606_REG_RTCMT 0x0f /* Month */
+#define PCF50606_REG_RTCYR 0x10 /* Year */
+#define PCF50606_REG_RTCSCA 0x11 /* Alarm Second */
+#define PCF50606_REG_RTCMNA 0x12 /* Alarm Minute */
+#define PCF50606_REG_RTCHRA 0x13 /* Alarm Hour */
+#define PCF50606_REG_RTCWDA 0x14 /* Alarm Weekday */
+#define PCF50606_REG_RTCDTA 0x15 /* Alarm Day */
+#define PCF50606_REG_RTCMTA 0x16 /* Alarm Month */
+#define PCF50606_REG_RTCYRA 0x17 /* Alarm Year */
+
+struct pcf50606_rtc {
+ int alarm_enabled;
+ int second_enabled;
+
+ struct rtc_device *rtc_dev;
+ struct platform_device *pdev;
+};
+
+#endif
+
diff --git a/include/linux/mfd/pcf50606/wdt.h b/include/linux/mfd/pcf50606/wdt.h
new file mode 100644
index 00000000000..d91de905529
--- /dev/null
+++ b/include/linux/mfd/pcf50606/wdt.h
@@ -0,0 +1,32 @@
+/*
+ * wdt.h -- WDT driver for NXP PCF50606
+ *
+ * (C) 2006-2008 by Openmoko, Inc.
+ * All rights reserved.
+ *
+ * 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.
+ */
+
+#ifndef __LINUX_MFD_PCF50606_WDT_H
+#define __LINUX_MFD_PCF50606_WDT_H
+
+#define PCF50606_REG_OOCC1 0x08
+#define PCF50606_REG_OOCS 0x01
+
+#define PCF50606_OOCS_WDTEXP 0x80
+#define PCF50606_OOCC1_WDTRST 0x08
+
+#define CLOSE_STATE_NOT 0x0000
+#define CLOSE_STATE_ALLOW 0x2342
+
+struct pcf50606;
+
+struct pcf50606_wdt {
+ struct platform_device *pdev;
+};
+#endif /* __LINUX_MFD_PCF50606_WDT_H */
+
+