Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

mfd: max77693: Init max77693->dev before using it

Current code uses max77693->dev in the dev_err call before setting it to
&i2c->dev. Fix it.

This patch also includes below cleanups:
- Move checking pdata earlier and show dev_err if no platform data found.
- Remove unnecessary err_regmap goto label.
- Unregister i2c devices if regmap init for muic fails.

Signed-off-by: Axel Lin <axel.lin@ingics.com>
Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>

authored by

Axel Lin and committed by
Samuel Ortiz
2429d863 136d982e

+18 -16
+18 -16
drivers/mfd/max77693.c
··· 114 114 u8 reg_data; 115 115 int ret = 0; 116 116 117 + if (!pdata) { 118 + dev_err(&i2c->dev, "No platform data found.\n"); 119 + return -EINVAL; 120 + } 121 + 117 122 max77693 = devm_kzalloc(&i2c->dev, 118 123 sizeof(struct max77693_dev), GFP_KERNEL); 119 124 if (max77693 == NULL) 120 125 return -ENOMEM; 121 - 122 - max77693->regmap = devm_regmap_init_i2c(i2c, &max77693_regmap_config); 123 - if (IS_ERR(max77693->regmap)) { 124 - ret = PTR_ERR(max77693->regmap); 125 - dev_err(max77693->dev,"failed to allocate register map: %d\n", 126 - ret); 127 - goto err_regmap; 128 - } 129 126 130 127 i2c_set_clientdata(i2c, max77693); 131 128 max77693->dev = &i2c->dev; ··· 130 133 max77693->irq = i2c->irq; 131 134 max77693->type = id->driver_data; 132 135 133 - if (!pdata) 134 - goto err_regmap; 136 + max77693->regmap = devm_regmap_init_i2c(i2c, &max77693_regmap_config); 137 + if (IS_ERR(max77693->regmap)) { 138 + ret = PTR_ERR(max77693->regmap); 139 + dev_err(max77693->dev, "failed to allocate register map: %d\n", 140 + ret); 141 + return ret; 142 + } 135 143 136 144 max77693->wakeup = pdata->wakeup; 137 145 138 - if (max77693_read_reg(max77693->regmap, 139 - MAX77693_PMIC_REG_PMIC_ID2, &reg_data) < 0) { 146 + ret = max77693_read_reg(max77693->regmap, MAX77693_PMIC_REG_PMIC_ID2, 147 + &reg_data); 148 + if (ret < 0) { 140 149 dev_err(max77693->dev, "device not found on this channel\n"); 141 - ret = -ENODEV; 142 - goto err_regmap; 150 + return ret; 143 151 } else 144 152 dev_info(max77693->dev, "device ID: 0x%x\n", reg_data); 145 153 ··· 165 163 ret = PTR_ERR(max77693->regmap_muic); 166 164 dev_err(max77693->dev, 167 165 "failed to allocate register map: %d\n", ret); 168 - goto err_regmap; 166 + goto err_regmap_muic; 169 167 } 170 168 171 169 ret = max77693_irq_init(max77693); ··· 186 184 err_mfd: 187 185 max77693_irq_exit(max77693); 188 186 err_irq: 187 + err_regmap_muic: 189 188 i2c_unregister_device(max77693->muic); 190 189 i2c_unregister_device(max77693->haptic); 191 - err_regmap: 192 190 return ret; 193 191 } 194 192