Re: [RFC PATCH 2/8] regulator: Add Dialog DA906x voltage regulators support.
From: Mark Brown <hidden>
Date: 2012-08-25 15:10:27
Also in:
linux-watchdog, lkml
On Fri, Aug 24, 2012 at 02:55:00PM +0100, Krystian Garbaciak wrote:
+static int da906x_set_voltage(struct regulator_dev *rdev,
+ int min_uV, int max_uV, unsigned *selector)
+{
+ struct da906x_regulator *regl = rdev_get_drvdata(rdev);
+ const struct field *fvol = ®l->info->voltage;
+ int ret;
+ unsigned val;
+
+ val = regulator_map_voltage_linear(rdev, min_uV, max_uV);
+ if (val < 0)
+ return -EINVAL;
+
+ val = (val + fvol->offset) << fvol->shift;
+ ret = da906x_reg_update(regl->hw, fvol->addr, fvol->mask, val);
+ if (ret >= 0)
+ *selector = val;
+
+ return ret;
+}This is just set_voltage_sel_regmap().
+static int da906x_enable(struct regulator_dev *rdev)
+{
+ struct da906x_regulator *regl = rdev_get_drvdata(rdev);
+ int ret;
+
+ if (regl->info->suspend.mask) {
+ /* Make sure to exit from suspend mode on enable */
+ ret = da906x_reg_clear_bits(regl->hw, regl->info->suspend.addr,
+ regl->info->suspend.mask);
+ if (ret < 0)
+ return ret;
+
+ /* BUCKs need mode update after wake-up from suspend state. */
+ ret = da906x_update_mode_internal(regl, SYS_STATE_NORMAL);
+ if (ret < 0)
+ return ret;
+ }
+
+ return regulator_enable_regmap(rdev);If suspend_mask is optional the regulators using it should just use the standard operation.
+/* Regulator event handlers */ +irqreturn_t da906x_ldo_lim_event(int irq, void *data)
By "event handler" you mean "interrupt"
+ bits = da906x_reg_read(hw, DA906X_REG_STATUS_D); + if (bits < 0) + return IRQ_HANDLED;
If you fail to detect an interrupt you report that you handled one...?
+ if (!da906x_pdata) {
+ dev_err(&pdev->dev, "No platform init data supplied\n");
+ return -ENODEV;
+ }Platform data should be totally optional.
+ bcores_merged = (ret & DA906X_BCORE_MERGE) ? true : false; + bmem_bio_merged = (ret & DA906X_BUCK_MERGE) ? true : false;
The use of the ternery operation here is even worse than normal, you can assign the values directly.