2010-04-12 23:05:40

by Linus Walleij

[permalink] [raw]
Subject: [PATCH 1/3] MFD: renamed ab3100.h to abx500.h

The goal here is to make way for a more general interface for the
analog baseband chips ab3100 ab3550 ab550 and future chips.

This patch have been divided into two parts since both changing name
and content of a file is not recommended in git.

Signed-off-by: Mattias Wallin <[email protected]>
Signed-off-by: Linus Walleij <[email protected]>
---
arch/arm/mach-u300/i2c.c | 2 +-
drivers/mfd/ab3100-core.c | 2 +-
drivers/mfd/ab3100-otp.c | 2 +-
drivers/regulator/ab3100.c | 2 +-
drivers/rtc/rtc-ab3100.c | 2 +-
include/linux/mfd/ab3100.h | 129 --------------------------------------------
include/linux/mfd/abx500.h | 129 ++++++++++++++++++++++++++++++++++++++++++++
7 files changed, 134 insertions(+), 134 deletions(-)
delete mode 100644 include/linux/mfd/ab3100.h
create mode 100644 include/linux/mfd/abx500.h

diff --git a/arch/arm/mach-u300/i2c.c b/arch/arm/mach-u300/i2c.c
index c73ed06..d893ee0 100644
--- a/arch/arm/mach-u300/i2c.c
+++ b/arch/arm/mach-u300/i2c.c
@@ -9,7 +9,7 @@
*/
#include <linux/kernel.h>
#include <linux/i2c.h>
-#include <linux/mfd/ab3100.h>
+#include <linux/mfd/abx500.h>
#include <linux/regulator/machine.h>
#include <linux/amba/bus.h>
#include <mach/irqs.h>
diff --git a/drivers/mfd/ab3100-core.c b/drivers/mfd/ab3100-core.c
index 1689821..f8c4a33 100644
--- a/drivers/mfd/ab3100-core.c
+++ b/drivers/mfd/ab3100-core.c
@@ -19,7 +19,7 @@
#include <linux/debugfs.h>
#include <linux/seq_file.h>
#include <linux/uaccess.h>
-#include <linux/mfd/ab3100.h>
+#include <linux/mfd/abx500.h>

/* These are the only registers inside AB3100 used in this main file */

diff --git a/drivers/mfd/ab3100-otp.c b/drivers/mfd/ab3100-otp.c
index 2d14655..7093f1a 100644
--- a/drivers/mfd/ab3100-otp.c
+++ b/drivers/mfd/ab3100-otp.c
@@ -12,7 +12,7 @@
#include <linux/slab.h>
#include <linux/init.h>
#include <linux/platform_device.h>
-#include <linux/mfd/ab3100.h>
+#include <linux/mfd/abx500.h>
#include <linux/debugfs.h>
#include <linux/seq_file.h>

diff --git a/drivers/regulator/ab3100.c b/drivers/regulator/ab3100.c
index 7de9509..1b8b0ab 100644
--- a/drivers/regulator/ab3100.c
+++ b/drivers/regulator/ab3100.c
@@ -16,7 +16,7 @@
#include <linux/delay.h>
#include <linux/platform_device.h>
#include <linux/regulator/driver.h>
-#include <linux/mfd/ab3100.h>
+#include <linux/mfd/abx500.h>

/* LDO registers and some handy masking definitions for AB3100 */
#define AB3100_LDO_A 0x40
diff --git a/drivers/rtc/rtc-ab3100.c b/drivers/rtc/rtc-ab3100.c
index 4704aac..b46b85d 100644
--- a/drivers/rtc/rtc-ab3100.c
+++ b/drivers/rtc/rtc-ab3100.c
@@ -9,7 +9,7 @@
#include <linux/init.h>
#include <linux/platform_device.h>
#include <linux/rtc.h>
-#include <linux/mfd/ab3100.h>
+#include <linux/mfd/abx500.h>

/* Clock rate in Hz */
#define AB3100_RTC_CLOCK_RATE 32768
diff --git a/include/linux/mfd/ab3100.h b/include/linux/mfd/ab3100.h
deleted file mode 100644
index 9a881c3..0000000
--- a/include/linux/mfd/ab3100.h
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright (C) 2007-2009 ST-Ericsson AB
- * License terms: GNU General Public License (GPL) version 2
- * AB3100 core access functions
- * Author: Linus Walleij <[email protected]>
- */
-
-#include <linux/device.h>
-#include <linux/regulator/machine.h>
-
-#ifndef MFD_AB3100_H
-#define MFD_AB3100_H
-
-#define ABUNKNOWN 0
-#define AB3000 1
-#define AB3100 2
-
-/*
- * AB3100, EVENTA1, A2 and A3 event register flags
- * these are catenated into a single 32-bit flag in the code
- * for event notification broadcasts.
- */
-#define AB3100_EVENTA1_ONSWA (0x01<<16)
-#define AB3100_EVENTA1_ONSWB (0x02<<16)
-#define AB3100_EVENTA1_ONSWC (0x04<<16)
-#define AB3100_EVENTA1_DCIO (0x08<<16)
-#define AB3100_EVENTA1_OVER_TEMP (0x10<<16)
-#define AB3100_EVENTA1_SIM_OFF (0x20<<16)
-#define AB3100_EVENTA1_VBUS (0x40<<16)
-#define AB3100_EVENTA1_VSET_USB (0x80<<16)
-
-#define AB3100_EVENTA2_READY_TX (0x01<<8)
-#define AB3100_EVENTA2_READY_RX (0x02<<8)
-#define AB3100_EVENTA2_OVERRUN_ERROR (0x04<<8)
-#define AB3100_EVENTA2_FRAMING_ERROR (0x08<<8)
-#define AB3100_EVENTA2_CHARG_OVERCURRENT (0x10<<8)
-#define AB3100_EVENTA2_MIDR (0x20<<8)
-#define AB3100_EVENTA2_BATTERY_REM (0x40<<8)
-#define AB3100_EVENTA2_ALARM (0x80<<8)
-
-#define AB3100_EVENTA3_ADC_TRIG5 (0x01)
-#define AB3100_EVENTA3_ADC_TRIG4 (0x02)
-#define AB3100_EVENTA3_ADC_TRIG3 (0x04)
-#define AB3100_EVENTA3_ADC_TRIG2 (0x08)
-#define AB3100_EVENTA3_ADC_TRIGVBAT (0x10)
-#define AB3100_EVENTA3_ADC_TRIGVTX (0x20)
-#define AB3100_EVENTA3_ADC_TRIG1 (0x40)
-#define AB3100_EVENTA3_ADC_TRIG0 (0x80)
-
-/* AB3100, STR register flags */
-#define AB3100_STR_ONSWA (0x01)
-#define AB3100_STR_ONSWB (0x02)
-#define AB3100_STR_ONSWC (0x04)
-#define AB3100_STR_DCIO (0x08)
-#define AB3100_STR_BOOT_MODE (0x10)
-#define AB3100_STR_SIM_OFF (0x20)
-#define AB3100_STR_BATT_REMOVAL (0x40)
-#define AB3100_STR_VBUS (0x80)
-
-/*
- * AB3100 contains 8 regulators, one external regulator controller
- * and a buck converter, further the LDO E and buck converter can
- * have separate settings if they are in sleep mode, this is
- * modeled as a separate regulator.
- */
-#define AB3100_NUM_REGULATORS 10
-
-/**
- * struct ab3100
- * @access_mutex: lock out concurrent accesses to the AB3100 registers
- * @dev: pointer to the containing device
- * @i2c_client: I2C client for this chip
- * @testreg_client: secondary client for test registers
- * @chip_name: name of this chip variant
- * @chip_id: 8 bit chip ID for this chip variant
- * @event_subscribers: event subscribers are listed here
- * @startup_events: a copy of the first reading of the event registers
- * @startup_events_read: whether the first events have been read
- *
- * This struct is PRIVATE and devices using it should NOT
- * access ANY fields. It is used as a token for calling the
- * AB3100 functions.
- */
-struct ab3100 {
- struct mutex access_mutex;
- struct device *dev;
- struct i2c_client *i2c_client;
- struct i2c_client *testreg_client;
- char chip_name[32];
- u8 chip_id;
- struct blocking_notifier_head event_subscribers;
- u32 startup_events;
- bool startup_events_read;
-};
-
-/**
- * struct ab3100_platform_data
- * Data supplied to initialize board connections to the AB3100
- * @reg_constraints: regulator constraints for target board
- * the order of these constraints are: LDO A, C, D, E,
- * F, G, H, K, EXT and BUCK.
- * @reg_initvals: initial values for the regulator registers
- * plus two sleep settings for LDO E and the BUCK converter.
- * exactly AB3100_NUM_REGULATORS+2 values must be sent in.
- * Order: LDO A, C, E, E sleep, F, G, H, K, EXT, BUCK,
- * BUCK sleep, LDO D. (LDO D need to be initialized last.)
- * @external_voltage: voltage level of the external regulator.
- */
-struct ab3100_platform_data {
- struct regulator_init_data reg_constraints[AB3100_NUM_REGULATORS];
- u8 reg_initvals[AB3100_NUM_REGULATORS+2];
- int external_voltage;
-};
-
-int ab3100_set_register_interruptible(struct ab3100 *ab3100, u8 reg, u8 regval);
-int ab3100_get_register_interruptible(struct ab3100 *ab3100, u8 reg, u8 *regval);
-int ab3100_get_register_page_interruptible(struct ab3100 *ab3100,
- u8 first_reg, u8 *regvals, u8 numregs);
-int ab3100_mask_and_set_register_interruptible(struct ab3100 *ab3100,
- u8 reg, u8 andmask, u8 ormask);
-u8 ab3100_get_chip_type(struct ab3100 *ab3100);
-int ab3100_event_register(struct ab3100 *ab3100,
- struct notifier_block *nb);
-int ab3100_event_unregister(struct ab3100 *ab3100,
- struct notifier_block *nb);
-int ab3100_event_registers_startup_state_get(struct ab3100 *ab3100,
- u32 *fatevent);
-
-#endif
diff --git a/include/linux/mfd/abx500.h b/include/linux/mfd/abx500.h
new file mode 100644
index 0000000..9a881c3
--- /dev/null
+++ b/include/linux/mfd/abx500.h
@@ -0,0 +1,129 @@
+/*
+ * Copyright (C) 2007-2009 ST-Ericsson AB
+ * License terms: GNU General Public License (GPL) version 2
+ * AB3100 core access functions
+ * Author: Linus Walleij <[email protected]>
+ */
+
+#include <linux/device.h>
+#include <linux/regulator/machine.h>
+
+#ifndef MFD_AB3100_H
+#define MFD_AB3100_H
+
+#define ABUNKNOWN 0
+#define AB3000 1
+#define AB3100 2
+
+/*
+ * AB3100, EVENTA1, A2 and A3 event register flags
+ * these are catenated into a single 32-bit flag in the code
+ * for event notification broadcasts.
+ */
+#define AB3100_EVENTA1_ONSWA (0x01<<16)
+#define AB3100_EVENTA1_ONSWB (0x02<<16)
+#define AB3100_EVENTA1_ONSWC (0x04<<16)
+#define AB3100_EVENTA1_DCIO (0x08<<16)
+#define AB3100_EVENTA1_OVER_TEMP (0x10<<16)
+#define AB3100_EVENTA1_SIM_OFF (0x20<<16)
+#define AB3100_EVENTA1_VBUS (0x40<<16)
+#define AB3100_EVENTA1_VSET_USB (0x80<<16)
+
+#define AB3100_EVENTA2_READY_TX (0x01<<8)
+#define AB3100_EVENTA2_READY_RX (0x02<<8)
+#define AB3100_EVENTA2_OVERRUN_ERROR (0x04<<8)
+#define AB3100_EVENTA2_FRAMING_ERROR (0x08<<8)
+#define AB3100_EVENTA2_CHARG_OVERCURRENT (0x10<<8)
+#define AB3100_EVENTA2_MIDR (0x20<<8)
+#define AB3100_EVENTA2_BATTERY_REM (0x40<<8)
+#define AB3100_EVENTA2_ALARM (0x80<<8)
+
+#define AB3100_EVENTA3_ADC_TRIG5 (0x01)
+#define AB3100_EVENTA3_ADC_TRIG4 (0x02)
+#define AB3100_EVENTA3_ADC_TRIG3 (0x04)
+#define AB3100_EVENTA3_ADC_TRIG2 (0x08)
+#define AB3100_EVENTA3_ADC_TRIGVBAT (0x10)
+#define AB3100_EVENTA3_ADC_TRIGVTX (0x20)
+#define AB3100_EVENTA3_ADC_TRIG1 (0x40)
+#define AB3100_EVENTA3_ADC_TRIG0 (0x80)
+
+/* AB3100, STR register flags */
+#define AB3100_STR_ONSWA (0x01)
+#define AB3100_STR_ONSWB (0x02)
+#define AB3100_STR_ONSWC (0x04)
+#define AB3100_STR_DCIO (0x08)
+#define AB3100_STR_BOOT_MODE (0x10)
+#define AB3100_STR_SIM_OFF (0x20)
+#define AB3100_STR_BATT_REMOVAL (0x40)
+#define AB3100_STR_VBUS (0x80)
+
+/*
+ * AB3100 contains 8 regulators, one external regulator controller
+ * and a buck converter, further the LDO E and buck converter can
+ * have separate settings if they are in sleep mode, this is
+ * modeled as a separate regulator.
+ */
+#define AB3100_NUM_REGULATORS 10
+
+/**
+ * struct ab3100
+ * @access_mutex: lock out concurrent accesses to the AB3100 registers
+ * @dev: pointer to the containing device
+ * @i2c_client: I2C client for this chip
+ * @testreg_client: secondary client for test registers
+ * @chip_name: name of this chip variant
+ * @chip_id: 8 bit chip ID for this chip variant
+ * @event_subscribers: event subscribers are listed here
+ * @startup_events: a copy of the first reading of the event registers
+ * @startup_events_read: whether the first events have been read
+ *
+ * This struct is PRIVATE and devices using it should NOT
+ * access ANY fields. It is used as a token for calling the
+ * AB3100 functions.
+ */
+struct ab3100 {
+ struct mutex access_mutex;
+ struct device *dev;
+ struct i2c_client *i2c_client;
+ struct i2c_client *testreg_client;
+ char chip_name[32];
+ u8 chip_id;
+ struct blocking_notifier_head event_subscribers;
+ u32 startup_events;
+ bool startup_events_read;
+};
+
+/**
+ * struct ab3100_platform_data
+ * Data supplied to initialize board connections to the AB3100
+ * @reg_constraints: regulator constraints for target board
+ * the order of these constraints are: LDO A, C, D, E,
+ * F, G, H, K, EXT and BUCK.
+ * @reg_initvals: initial values for the regulator registers
+ * plus two sleep settings for LDO E and the BUCK converter.
+ * exactly AB3100_NUM_REGULATORS+2 values must be sent in.
+ * Order: LDO A, C, E, E sleep, F, G, H, K, EXT, BUCK,
+ * BUCK sleep, LDO D. (LDO D need to be initialized last.)
+ * @external_voltage: voltage level of the external regulator.
+ */
+struct ab3100_platform_data {
+ struct regulator_init_data reg_constraints[AB3100_NUM_REGULATORS];
+ u8 reg_initvals[AB3100_NUM_REGULATORS+2];
+ int external_voltage;
+};
+
+int ab3100_set_register_interruptible(struct ab3100 *ab3100, u8 reg, u8 regval);
+int ab3100_get_register_interruptible(struct ab3100 *ab3100, u8 reg, u8 *regval);
+int ab3100_get_register_page_interruptible(struct ab3100 *ab3100,
+ u8 first_reg, u8 *regvals, u8 numregs);
+int ab3100_mask_and_set_register_interruptible(struct ab3100 *ab3100,
+ u8 reg, u8 andmask, u8 ormask);
+u8 ab3100_get_chip_type(struct ab3100 *ab3100);
+int ab3100_event_register(struct ab3100 *ab3100,
+ struct notifier_block *nb);
+int ab3100_event_unregister(struct ab3100 *ab3100,
+ struct notifier_block *nb);
+int ab3100_event_registers_startup_state_get(struct ab3100 *ab3100,
+ u32 *fatevent);
+
+#endif
--
1.7.0.1


2010-04-13 05:57:31

by Srinidhi Kasagar

[permalink] [raw]
Subject: Re: [PATCH 1/3] MFD: renamed ab3100.h to abx500.h

Linus,

On Tue, 2010-04-13 at 01:04 +0200, Linus Walleij wrote:
> The goal here is to make way for a more general interface for the
> analog baseband chips ab3100 ab3550 ab550 and future chips.

So do you expect the existing ab4500 also to be merged into abx500?

regards,
Srinidhi

2010-04-13 15:14:25

by Linus Walleij

[permalink] [raw]
Subject: Re: [PATCH 1/3] MFD: renamed ab3100.h to abx500.h

2010/4/13 srinidhi <[email protected]>:

> So do you expect the existing ab4500 also to be merged into abx500?

Don't think so, the 4500 is not related to the 3100, 3550 and 5500:s,
so they don't have much in common, whereas the latter share a lot of
characteristics. It's better if it stays where it is I think.

abx500 was the best name we could come up with that wasn't too
short, we contemplated abx.h but it was too short, abxxx0 looks
silly and so on. So abx500 denotes our largest family of mixsig ASICs
which has a lot in common, i.e. everything except the
AB8500/AB4500/STw4500, hope it's not too confusing...

But the ab4500 files should be renamed ab8500.[c|h] after current
product naming decisions though.

Yours,
Linus Walleij

2010-04-16 15:20:19

by Samuel Ortiz

[permalink] [raw]
Subject: Re: [PATCH 1/3] MFD: renamed ab3100.h to abx500.h

Hi Linus,

On Tue, Apr 13, 2010 at 01:04:56AM +0200, Linus Walleij wrote:
> The goal here is to make way for a more general interface for the
> analog baseband chips ab3100 ab3550 ab550 and future chips.
I have an initial question for you:
Do you plan to have one single driver supporting the 3100, 3550 and the 550
chips ?

Cheers,
Samuel.

> This patch have been divided into two parts since both changing name
> and content of a file is not recommended in git.
>
> Signed-off-by: Mattias Wallin <[email protected]>
> Signed-off-by: Linus Walleij <[email protected]>
> ---
> arch/arm/mach-u300/i2c.c | 2 +-
> drivers/mfd/ab3100-core.c | 2 +-
> drivers/mfd/ab3100-otp.c | 2 +-
> drivers/regulator/ab3100.c | 2 +-
> drivers/rtc/rtc-ab3100.c | 2 +-
> include/linux/mfd/ab3100.h | 129 --------------------------------------------
> include/linux/mfd/abx500.h | 129 ++++++++++++++++++++++++++++++++++++++++++++
> 7 files changed, 134 insertions(+), 134 deletions(-)
> delete mode 100644 include/linux/mfd/ab3100.h
> create mode 100644 include/linux/mfd/abx500.h
>
> diff --git a/arch/arm/mach-u300/i2c.c b/arch/arm/mach-u300/i2c.c
> index c73ed06..d893ee0 100644
> --- a/arch/arm/mach-u300/i2c.c
> +++ b/arch/arm/mach-u300/i2c.c
> @@ -9,7 +9,7 @@
> */
> #include <linux/kernel.h>
> #include <linux/i2c.h>
> -#include <linux/mfd/ab3100.h>
> +#include <linux/mfd/abx500.h>
> #include <linux/regulator/machine.h>
> #include <linux/amba/bus.h>
> #include <mach/irqs.h>
> diff --git a/drivers/mfd/ab3100-core.c b/drivers/mfd/ab3100-core.c
> index 1689821..f8c4a33 100644
> --- a/drivers/mfd/ab3100-core.c
> +++ b/drivers/mfd/ab3100-core.c
> @@ -19,7 +19,7 @@
> #include <linux/debugfs.h>
> #include <linux/seq_file.h>
> #include <linux/uaccess.h>
> -#include <linux/mfd/ab3100.h>
> +#include <linux/mfd/abx500.h>
>
> /* These are the only registers inside AB3100 used in this main file */
>
> diff --git a/drivers/mfd/ab3100-otp.c b/drivers/mfd/ab3100-otp.c
> index 2d14655..7093f1a 100644
> --- a/drivers/mfd/ab3100-otp.c
> +++ b/drivers/mfd/ab3100-otp.c
> @@ -12,7 +12,7 @@
> #include <linux/slab.h>
> #include <linux/init.h>
> #include <linux/platform_device.h>
> -#include <linux/mfd/ab3100.h>
> +#include <linux/mfd/abx500.h>
> #include <linux/debugfs.h>
> #include <linux/seq_file.h>
>
> diff --git a/drivers/regulator/ab3100.c b/drivers/regulator/ab3100.c
> index 7de9509..1b8b0ab 100644
> --- a/drivers/regulator/ab3100.c
> +++ b/drivers/regulator/ab3100.c
> @@ -16,7 +16,7 @@
> #include <linux/delay.h>
> #include <linux/platform_device.h>
> #include <linux/regulator/driver.h>
> -#include <linux/mfd/ab3100.h>
> +#include <linux/mfd/abx500.h>
>
> /* LDO registers and some handy masking definitions for AB3100 */
> #define AB3100_LDO_A 0x40
> diff --git a/drivers/rtc/rtc-ab3100.c b/drivers/rtc/rtc-ab3100.c
> index 4704aac..b46b85d 100644
> --- a/drivers/rtc/rtc-ab3100.c
> +++ b/drivers/rtc/rtc-ab3100.c
> @@ -9,7 +9,7 @@
> #include <linux/init.h>
> #include <linux/platform_device.h>
> #include <linux/rtc.h>
> -#include <linux/mfd/ab3100.h>
> +#include <linux/mfd/abx500.h>
>
> /* Clock rate in Hz */
> #define AB3100_RTC_CLOCK_RATE 32768
> diff --git a/include/linux/mfd/ab3100.h b/include/linux/mfd/ab3100.h
> deleted file mode 100644
> index 9a881c3..0000000
> --- a/include/linux/mfd/ab3100.h
> +++ /dev/null
> @@ -1,129 +0,0 @@
> -/*
> - * Copyright (C) 2007-2009 ST-Ericsson AB
> - * License terms: GNU General Public License (GPL) version 2
> - * AB3100 core access functions
> - * Author: Linus Walleij <[email protected]>
> - */
> -
> -#include <linux/device.h>
> -#include <linux/regulator/machine.h>
> -
> -#ifndef MFD_AB3100_H
> -#define MFD_AB3100_H
> -
> -#define ABUNKNOWN 0
> -#define AB3000 1
> -#define AB3100 2
> -
> -/*
> - * AB3100, EVENTA1, A2 and A3 event register flags
> - * these are catenated into a single 32-bit flag in the code
> - * for event notification broadcasts.
> - */
> -#define AB3100_EVENTA1_ONSWA (0x01<<16)
> -#define AB3100_EVENTA1_ONSWB (0x02<<16)
> -#define AB3100_EVENTA1_ONSWC (0x04<<16)
> -#define AB3100_EVENTA1_DCIO (0x08<<16)
> -#define AB3100_EVENTA1_OVER_TEMP (0x10<<16)
> -#define AB3100_EVENTA1_SIM_OFF (0x20<<16)
> -#define AB3100_EVENTA1_VBUS (0x40<<16)
> -#define AB3100_EVENTA1_VSET_USB (0x80<<16)
> -
> -#define AB3100_EVENTA2_READY_TX (0x01<<8)
> -#define AB3100_EVENTA2_READY_RX (0x02<<8)
> -#define AB3100_EVENTA2_OVERRUN_ERROR (0x04<<8)
> -#define AB3100_EVENTA2_FRAMING_ERROR (0x08<<8)
> -#define AB3100_EVENTA2_CHARG_OVERCURRENT (0x10<<8)
> -#define AB3100_EVENTA2_MIDR (0x20<<8)
> -#define AB3100_EVENTA2_BATTERY_REM (0x40<<8)
> -#define AB3100_EVENTA2_ALARM (0x80<<8)
> -
> -#define AB3100_EVENTA3_ADC_TRIG5 (0x01)
> -#define AB3100_EVENTA3_ADC_TRIG4 (0x02)
> -#define AB3100_EVENTA3_ADC_TRIG3 (0x04)
> -#define AB3100_EVENTA3_ADC_TRIG2 (0x08)
> -#define AB3100_EVENTA3_ADC_TRIGVBAT (0x10)
> -#define AB3100_EVENTA3_ADC_TRIGVTX (0x20)
> -#define AB3100_EVENTA3_ADC_TRIG1 (0x40)
> -#define AB3100_EVENTA3_ADC_TRIG0 (0x80)
> -
> -/* AB3100, STR register flags */
> -#define AB3100_STR_ONSWA (0x01)
> -#define AB3100_STR_ONSWB (0x02)
> -#define AB3100_STR_ONSWC (0x04)
> -#define AB3100_STR_DCIO (0x08)
> -#define AB3100_STR_BOOT_MODE (0x10)
> -#define AB3100_STR_SIM_OFF (0x20)
> -#define AB3100_STR_BATT_REMOVAL (0x40)
> -#define AB3100_STR_VBUS (0x80)
> -
> -/*
> - * AB3100 contains 8 regulators, one external regulator controller
> - * and a buck converter, further the LDO E and buck converter can
> - * have separate settings if they are in sleep mode, this is
> - * modeled as a separate regulator.
> - */
> -#define AB3100_NUM_REGULATORS 10
> -
> -/**
> - * struct ab3100
> - * @access_mutex: lock out concurrent accesses to the AB3100 registers
> - * @dev: pointer to the containing device
> - * @i2c_client: I2C client for this chip
> - * @testreg_client: secondary client for test registers
> - * @chip_name: name of this chip variant
> - * @chip_id: 8 bit chip ID for this chip variant
> - * @event_subscribers: event subscribers are listed here
> - * @startup_events: a copy of the first reading of the event registers
> - * @startup_events_read: whether the first events have been read
> - *
> - * This struct is PRIVATE and devices using it should NOT
> - * access ANY fields. It is used as a token for calling the
> - * AB3100 functions.
> - */
> -struct ab3100 {
> - struct mutex access_mutex;
> - struct device *dev;
> - struct i2c_client *i2c_client;
> - struct i2c_client *testreg_client;
> - char chip_name[32];
> - u8 chip_id;
> - struct blocking_notifier_head event_subscribers;
> - u32 startup_events;
> - bool startup_events_read;
> -};
> -
> -/**
> - * struct ab3100_platform_data
> - * Data supplied to initialize board connections to the AB3100
> - * @reg_constraints: regulator constraints for target board
> - * the order of these constraints are: LDO A, C, D, E,
> - * F, G, H, K, EXT and BUCK.
> - * @reg_initvals: initial values for the regulator registers
> - * plus two sleep settings for LDO E and the BUCK converter.
> - * exactly AB3100_NUM_REGULATORS+2 values must be sent in.
> - * Order: LDO A, C, E, E sleep, F, G, H, K, EXT, BUCK,
> - * BUCK sleep, LDO D. (LDO D need to be initialized last.)
> - * @external_voltage: voltage level of the external regulator.
> - */
> -struct ab3100_platform_data {
> - struct regulator_init_data reg_constraints[AB3100_NUM_REGULATORS];
> - u8 reg_initvals[AB3100_NUM_REGULATORS+2];
> - int external_voltage;
> -};
> -
> -int ab3100_set_register_interruptible(struct ab3100 *ab3100, u8 reg, u8 regval);
> -int ab3100_get_register_interruptible(struct ab3100 *ab3100, u8 reg, u8 *regval);
> -int ab3100_get_register_page_interruptible(struct ab3100 *ab3100,
> - u8 first_reg, u8 *regvals, u8 numregs);
> -int ab3100_mask_and_set_register_interruptible(struct ab3100 *ab3100,
> - u8 reg, u8 andmask, u8 ormask);
> -u8 ab3100_get_chip_type(struct ab3100 *ab3100);
> -int ab3100_event_register(struct ab3100 *ab3100,
> - struct notifier_block *nb);
> -int ab3100_event_unregister(struct ab3100 *ab3100,
> - struct notifier_block *nb);
> -int ab3100_event_registers_startup_state_get(struct ab3100 *ab3100,
> - u32 *fatevent);
> -
> -#endif
> diff --git a/include/linux/mfd/abx500.h b/include/linux/mfd/abx500.h
> new file mode 100644
> index 0000000..9a881c3
> --- /dev/null
> +++ b/include/linux/mfd/abx500.h
> @@ -0,0 +1,129 @@
> +/*
> + * Copyright (C) 2007-2009 ST-Ericsson AB
> + * License terms: GNU General Public License (GPL) version 2
> + * AB3100 core access functions
> + * Author: Linus Walleij <[email protected]>
> + */
> +
> +#include <linux/device.h>
> +#include <linux/regulator/machine.h>
> +
> +#ifndef MFD_AB3100_H
> +#define MFD_AB3100_H
> +
> +#define ABUNKNOWN 0
> +#define AB3000 1
> +#define AB3100 2
> +
> +/*
> + * AB3100, EVENTA1, A2 and A3 event register flags
> + * these are catenated into a single 32-bit flag in the code
> + * for event notification broadcasts.
> + */
> +#define AB3100_EVENTA1_ONSWA (0x01<<16)
> +#define AB3100_EVENTA1_ONSWB (0x02<<16)
> +#define AB3100_EVENTA1_ONSWC (0x04<<16)
> +#define AB3100_EVENTA1_DCIO (0x08<<16)
> +#define AB3100_EVENTA1_OVER_TEMP (0x10<<16)
> +#define AB3100_EVENTA1_SIM_OFF (0x20<<16)
> +#define AB3100_EVENTA1_VBUS (0x40<<16)
> +#define AB3100_EVENTA1_VSET_USB (0x80<<16)
> +
> +#define AB3100_EVENTA2_READY_TX (0x01<<8)
> +#define AB3100_EVENTA2_READY_RX (0x02<<8)
> +#define AB3100_EVENTA2_OVERRUN_ERROR (0x04<<8)
> +#define AB3100_EVENTA2_FRAMING_ERROR (0x08<<8)
> +#define AB3100_EVENTA2_CHARG_OVERCURRENT (0x10<<8)
> +#define AB3100_EVENTA2_MIDR (0x20<<8)
> +#define AB3100_EVENTA2_BATTERY_REM (0x40<<8)
> +#define AB3100_EVENTA2_ALARM (0x80<<8)
> +
> +#define AB3100_EVENTA3_ADC_TRIG5 (0x01)
> +#define AB3100_EVENTA3_ADC_TRIG4 (0x02)
> +#define AB3100_EVENTA3_ADC_TRIG3 (0x04)
> +#define AB3100_EVENTA3_ADC_TRIG2 (0x08)
> +#define AB3100_EVENTA3_ADC_TRIGVBAT (0x10)
> +#define AB3100_EVENTA3_ADC_TRIGVTX (0x20)
> +#define AB3100_EVENTA3_ADC_TRIG1 (0x40)
> +#define AB3100_EVENTA3_ADC_TRIG0 (0x80)
> +
> +/* AB3100, STR register flags */
> +#define AB3100_STR_ONSWA (0x01)
> +#define AB3100_STR_ONSWB (0x02)
> +#define AB3100_STR_ONSWC (0x04)
> +#define AB3100_STR_DCIO (0x08)
> +#define AB3100_STR_BOOT_MODE (0x10)
> +#define AB3100_STR_SIM_OFF (0x20)
> +#define AB3100_STR_BATT_REMOVAL (0x40)
> +#define AB3100_STR_VBUS (0x80)
> +
> +/*
> + * AB3100 contains 8 regulators, one external regulator controller
> + * and a buck converter, further the LDO E and buck converter can
> + * have separate settings if they are in sleep mode, this is
> + * modeled as a separate regulator.
> + */
> +#define AB3100_NUM_REGULATORS 10
> +
> +/**
> + * struct ab3100
> + * @access_mutex: lock out concurrent accesses to the AB3100 registers
> + * @dev: pointer to the containing device
> + * @i2c_client: I2C client for this chip
> + * @testreg_client: secondary client for test registers
> + * @chip_name: name of this chip variant
> + * @chip_id: 8 bit chip ID for this chip variant
> + * @event_subscribers: event subscribers are listed here
> + * @startup_events: a copy of the first reading of the event registers
> + * @startup_events_read: whether the first events have been read
> + *
> + * This struct is PRIVATE and devices using it should NOT
> + * access ANY fields. It is used as a token for calling the
> + * AB3100 functions.
> + */
> +struct ab3100 {
> + struct mutex access_mutex;
> + struct device *dev;
> + struct i2c_client *i2c_client;
> + struct i2c_client *testreg_client;
> + char chip_name[32];
> + u8 chip_id;
> + struct blocking_notifier_head event_subscribers;
> + u32 startup_events;
> + bool startup_events_read;
> +};
> +
> +/**
> + * struct ab3100_platform_data
> + * Data supplied to initialize board connections to the AB3100
> + * @reg_constraints: regulator constraints for target board
> + * the order of these constraints are: LDO A, C, D, E,
> + * F, G, H, K, EXT and BUCK.
> + * @reg_initvals: initial values for the regulator registers
> + * plus two sleep settings for LDO E and the BUCK converter.
> + * exactly AB3100_NUM_REGULATORS+2 values must be sent in.
> + * Order: LDO A, C, E, E sleep, F, G, H, K, EXT, BUCK,
> + * BUCK sleep, LDO D. (LDO D need to be initialized last.)
> + * @external_voltage: voltage level of the external regulator.
> + */
> +struct ab3100_platform_data {
> + struct regulator_init_data reg_constraints[AB3100_NUM_REGULATORS];
> + u8 reg_initvals[AB3100_NUM_REGULATORS+2];
> + int external_voltage;
> +};
> +
> +int ab3100_set_register_interruptible(struct ab3100 *ab3100, u8 reg, u8 regval);
> +int ab3100_get_register_interruptible(struct ab3100 *ab3100, u8 reg, u8 *regval);
> +int ab3100_get_register_page_interruptible(struct ab3100 *ab3100,
> + u8 first_reg, u8 *regvals, u8 numregs);
> +int ab3100_mask_and_set_register_interruptible(struct ab3100 *ab3100,
> + u8 reg, u8 andmask, u8 ormask);
> +u8 ab3100_get_chip_type(struct ab3100 *ab3100);
> +int ab3100_event_register(struct ab3100 *ab3100,
> + struct notifier_block *nb);
> +int ab3100_event_unregister(struct ab3100 *ab3100,
> + struct notifier_block *nb);
> +int ab3100_event_registers_startup_state_get(struct ab3100 *ab3100,
> + u32 *fatevent);
> +
> +#endif
> --
> 1.7.0.1
>

--
Intel Open Source Technology Centre
http://oss.intel.com/

2010-04-17 05:37:14

by Linus Walleij

[permalink] [raw]
Subject: Re: [PATCH 1/3] MFD: renamed ab3100.h to abx500.h

2010/4/16 Samuel Ortiz <[email protected]>:
> On Tue, Apr 13, 2010 at 01:04:56AM +0200, Linus Walleij wrote:
>> The goal here is to make way for a more general interface for the
>> analog baseband chips ab3100 ab3550 ab550 and future chips.
> I have an initial question for you:

> Do you plan to have one single driver supporting the 3100, 3550 and the 550
> chips ?

Not really, just one common interface. The 3100, 3550 and 5500 share
sub-blocks so for example the RTC driver in drivers/rtc/rtc-ab3100.c should
be possible to use with either of them, but the core driver implementation
will likely differ. (We might need to rename the file for clarity though.)

A main point of difference will be how these are accessed: right now the
AB3100 and AB3550 are on the I2C bus, the AB5500 will have access
through a special on-chip controller instead.

So the driver/mfd/ab3100.c|ab3550.c|ab5500.c will be different, but all
implement the API from include/linux/mfd/abx500.h and subdrivers will
hopefully be possible to share.

Yours,
Linus Walleij