History

Merge tag 'mfd-for-linus-3.8-1' of git://git.kernel.org/pub/scm/linux/kernel/git/sameo/mfd-2.6

Pull MFD fixes from Samuel Ortiz: "This is the first pull request for MFD fixes for 3.8 We have some build failure fixes (twl4030, vexpress, abx500 and tps65910), some actual runtime oops and lockup fixes (rtsx, da9052), and some more hypothetical NULL pointers dereferences fixes for pcf50633 and max776xx. Then we also have additional rtsx fixes for a correct switch output voltage and clock divider correctness for rtl8411 (rtsx driver), and irqdomain fix for db8550-prcmu, and some more cosmetic fixes for arizona and wm5102." * tag 'mfd-for-linus-3.8-1' of git://git.kernel.org/pub/scm/linux/kernel/git/sameo/mfd-2.6: mfd: rtsx: Fix oops when rtsx_pci_sdmmc is not probed mfd: wm5102: Fix definition of WM5102_MAX_REGISTER mfd: twl4030: Don't warn about uninitialized return code mfd: da9052/53 lockup fix mfd: rtsx: Add clock divider hook mmc: rtsx: Call MFD hook to switch output voltage mfd: rtsx: Add output voltage switch hook mfd: Fix compile errors and warnings when !CONFIG_AB8500_BM mfd: vexpress: Export global functions to fix build error mfd: arizona: Check errors from regcache_sync() mfd: tc3589x: Use simple irqdomain mfd: pcf50633: Init pcf->dev before using it mfd: max77693: Init max77693->dev before using it mfd: max77686: Init max77686->dev before using it mfd: db8500-prcmu: Fix irqdomain usage mfd: tps65910: Select REGMAP_IRQ in Kconfig to fix build error mfd: arizona: Disable control interface reporting for WM5102 and WM5110

Linus Torvalds committed 13 years ago

Commit 325a86b2 parents 22f8379 2d1484f24 files · +314 −129Browse files

Showing the changes to include/linux (6 of 24 files). Show all

Unified · Split

6 files
  1. include/linux/mfd/abx500.h +0 −2
  2. include/linux/mfd/abx500/ab8500-bm.h +4 −25
  3. include/linux/mfd/da9052/da9052.h +62 −4
  4. include/linux/mfd/da9052/reg.h +3 −0
  5. include/linux/mfd/rtsx_common.h +3 −0
  6. include/linux/mfd/rtsx_pci.h +21 −4
include/linux/mfd/abx500.h+0−2
@@ -272,8 +272,6 @@ struct abx500_bm_data { · 271 unmodified lines
272272 const struct abx500_fg_parameters *fg_params;
273273 };
274274
275−extern struct abx500_bm_data ab8500_bm_data;
276−
277275 enum {
278276 NTC_EXTERNAL = 0,
279277 NTC_INTERNAL,
include/linux/mfd/abx500/ab8500-bm.h+4−25
@@ -422,7 +422,10 @@ struct ab8500_chargalg_platform_data { · 421 unmodified lines
422422 struct ab8500_btemp;
423423 struct ab8500_gpadc;
424424 struct ab8500_fg;
425+
425426 #ifdef CONFIG_AB8500_BM
427+extern struct abx500_bm_data ab8500_bm_data;
428+
426429 void ab8500_fg_reinit(void);
427430 void ab8500_charger_usb_state_changed(u8 bm_usb_state, u16 mA);
428431 struct ab8500_btemp *ab8500_btemp_get(void);
@@ -434,31 +437,7 @@ int ab8500_fg_inst_curr_finalize(struct ab8500_fg *di, int *res); · 5 unmodified lines
434437 int ab8500_fg_inst_curr_done(struct ab8500_fg *di);
435438
436439 #else
437−int ab8500_fg_inst_curr_done(struct ab8500_fg *di)
438−{
439−}
440−static void ab8500_fg_reinit(void)
441−{
442−}
443−static void ab8500_charger_usb_state_changed(u8 bm_usb_state, u16 mA)
444−{
445−}
446−static struct ab8500_btemp *ab8500_btemp_get(void)
447−{
448− return NULL;
449−}
450−static int ab8500_btemp_get_batctrl_temp(struct ab8500_btemp *btemp)
451−{
452− return 0;
453−}
454−struct ab8500_fg *ab8500_fg_get(void)
455−{
456− return NULL;
457−}
458−static int ab8500_fg_inst_curr_blocking(struct ab8500_fg *dev)
459−{
460− return -ENODEV;
461−}
440+static struct abx500_bm_data ab8500_bm_data;
462441
463442 static inline int ab8500_fg_inst_curr_start(struct ab8500_fg *di)
464443 {
include/linux/mfd/da9052/da9052.h+62−4
@@ -99,6 +99,9 @@ struct da9052 { · 98 unmodified lines
9999 u8 chip_id;
100100
101101 int chip_irq;
102+
103+ /* SOC I/O transfer related fixes for DA9052/53 */
104+ int (*fix_io) (struct da9052 *da9052, unsigned char reg);
102105 };
103106
104107 /* ADC API */
@@ -113,32 +116,87 @@ static inline int da9052_reg_read(struct da9052 *da9052, unsigned char reg) · 8 unmodified lines
113116 ret = regmap_read(da9052->regmap, reg, &val);
114117 if (ret < 0)
115118 return ret;
119+
120+ if (da9052->fix_io) {
121+ ret = da9052->fix_io(da9052, reg);
122+ if (ret < 0)
123+ return ret;
124+ }
125+
116126 return val;
117127 }
118128
119129 static inline int da9052_reg_write(struct da9052 *da9052, unsigned char reg,
120130 unsigned char val)
121131 {
122− return regmap_write(da9052->regmap, reg, val);
132+ int ret;
133+
134+ ret = regmap_write(da9052->regmap, reg, val);
135+ if (ret < 0)
136+ return ret;
137+
138+ if (da9052->fix_io) {
139+ ret = da9052->fix_io(da9052, reg);
140+ if (ret < 0)
141+ return ret;
142+ }
143+
144+ return ret;
123145 }
124146
125147 static inline int da9052_group_read(struct da9052 *da9052, unsigned char reg,
126148 unsigned reg_cnt, unsigned char *val)
127149 {
128− return regmap_bulk_read(da9052->regmap, reg, val, reg_cnt);
150+ int ret;
151+
152+ ret = regmap_bulk_read(da9052->regmap, reg, val, reg_cnt);
153+ if (ret < 0)
154+ return ret;
155+
156+ if (da9052->fix_io) {
157+ ret = da9052->fix_io(da9052, reg);
158+ if (ret < 0)
159+ return ret;
160+ }
161+
162+ return ret;
129163 }
130164
131165 static inline int da9052_group_write(struct da9052 *da9052, unsigned char reg,
132166 unsigned reg_cnt, unsigned char *val)
133167 {
134− return regmap_raw_write(da9052->regmap, reg, val, reg_cnt);
168+ int ret;
169+
170+ ret = regmap_raw_write(da9052->regmap, reg, val, reg_cnt);
171+ if (ret < 0)
172+ return ret;
173+
174+ if (da9052->fix_io) {
175+ ret = da9052->fix_io(da9052, reg);
176+ if (ret < 0)
177+ return ret;
178+ }
179+
180+ return ret;
135181 }
136182
137183 static inline int da9052_reg_update(struct da9052 *da9052, unsigned char reg,
138184 unsigned char bit_mask,
139185 unsigned char reg_val)
140186 {
141− return regmap_update_bits(da9052->regmap, reg, bit_mask, reg_val);
187+ int ret;
188+
189+ ret = regmap_update_bits(da9052->regmap, reg, bit_mask, reg_val);
190+ if (ret < 0)
191+ return ret;
192+
193+ if (da9052->fix_io) {
194+ ret = da9052->fix_io(da9052, reg);
195+ if (ret < 0)
196+ return ret;
197+ }
198+
199+ return ret;
142200 }
143201
144202 int da9052_device_init(struct da9052 *da9052, u8 chip_id);
include/linux/mfd/da9052/reg.h+3−0
@@ -34,6 +34,9 @@ · 33 unmodified lines
3434 #define DA9052_STATUS_C_REG 3
3535 #define DA9052_STATUS_D_REG 4
3636
37+/* PARK REGISTER */
38+#define DA9052_PARK_REGISTER DA9052_STATUS_D_REG
39+
3740 /* EVENT REGISTERS */
3841 #define DA9052_EVENT_A_REG 5
3942 #define DA9052_EVENT_B_REG 6
include/linux/mfd/rtsx_common.h+3−0
@@ -38,6 +38,9 @@ · 37 unmodified lines
3838 #define RTSX_SD_CARD 0
3939 #define RTSX_MS_CARD 1
4040
41+#define CLK_TO_DIV_N 0
42+#define DIV_N_TO_CLK 1
43+
4144 struct platform_device;
4245
4346 struct rtsx_slot {
include/linux/mfd/rtsx_pci.h+21−4
@@ -158,10 +158,9 @@ · 157 unmodified lines
158158 #define SG_TRANS_DATA (0x02 << 4)
159159 #define SG_LINK_DESC (0x03 << 4)
160160
161−/* SD bank voltage */
162−#define SD_IO_3V3 0
163−#define SD_IO_1V8 1
164−
161+/* Output voltage */
162+#define OUTPUT_3V3 0
163+#define OUTPUT_1V8 1
165164
166165 /* Card Clock Enable Register */
167166 #define SD_CLK_EN 0x04
@@ -201,6 +200,20 @@ · 33 unmodified lines
201200 #define CHANGE_CLK 0x01
202201
203202 /* LDO_CTL */
203+#define BPP_ASIC_1V7 0x00
204+#define BPP_ASIC_1V8 0x01
205+#define BPP_ASIC_1V9 0x02
206+#define BPP_ASIC_2V0 0x03
207+#define BPP_ASIC_2V7 0x04
208+#define BPP_ASIC_2V8 0x05
209+#define BPP_ASIC_3V2 0x06
210+#define BPP_ASIC_3V3 0x07
211+#define BPP_REG_TUNED18 0x07
212+#define BPP_TUNED18_SHIFT_8402 5
213+#define BPP_TUNED18_SHIFT_8411 4
214+#define BPP_PAD_MASK 0x04
215+#define BPP_PAD_3V3 0x04
216+#define BPP_PAD_1V8 0x00
204217 #define BPP_LDO_POWB 0x03
205218 #define BPP_LDO_ON 0x00
206219 #define BPP_LDO_SUSPEND 0x02
@@ -688,7 +701,10 @@ struct pcr_ops { · 481 unmodified lines
688701 int (*disable_auto_blink)(struct rtsx_pcr *pcr);
689702 int (*card_power_on)(struct rtsx_pcr *pcr, int card);
690703 int (*card_power_off)(struct rtsx_pcr *pcr, int card);
704+ int (*switch_output_voltage)(struct rtsx_pcr *pcr,
705+ u8 voltage);
691706 unsigned int (*cd_deglitch)(struct rtsx_pcr *pcr);
707+ int (*conv_clk_and_div_n)(int clk, int dir);
692708 };
693709
694710 enum PDEV_STAT {PDEV_STAT_IDLE, PDEV_STAT_RUN};
@@ -783,6 +799,7 @@ int rtsx_pci_switch_clock(struct rtsx_pcr *pcr, unsigned int card_clock, · 88 unmodified lines
783799 u8 ssc_depth, bool initial_mode, bool double_clk, bool vpclk);
784800 int rtsx_pci_card_power_on(struct rtsx_pcr *pcr, int card);
785801 int rtsx_pci_card_power_off(struct rtsx_pcr *pcr, int card);
802+int rtsx_pci_switch_output_voltage(struct rtsx_pcr *pcr, u8 voltage);
786803 unsigned int rtsx_pci_card_exist(struct rtsx_pcr *pcr);
787804 void rtsx_pci_complete_unfinished_transfer(struct rtsx_pcr *pcr);
788805