return ERR_PTR(-ENOMEM);
}
+ if (of_get_property(dev->of_node, "max77686,enable-low-jitter", NULL))
+ pd->low_jitter = MAX77686_PROP_LOW_JITTER_ON;
+ else if (of_get_property(dev->of_node, "max77686,disable-low-jitter",
+ NULL))
+ pd->low_jitter = MAX77686_PROP_LOW_JITTER_OFF;
+ dbg_info(dev, "low-jitter property: %u\n", pd->low_jitter);
+
return pd;
}
#else
}
#endif
+static int max77686_set_low_jitter(struct max77686_dev *max77686)
+{
+ int ret;
+ u8 jitter = 0;
+
+ if (max77686->pdata->low_jitter == MAX77686_PROP_LOW_JITTER_DFL)
+ return 0;
+ if (max77686->pdata->low_jitter == MAX77686_PROP_LOW_JITTER_ON)
+ jitter = LOW_JITTER_MASK;
+
+ ret = max77686_update_reg(max77686->i2c, MAX77686_REG_32KHZ_, jitter,
+ LOW_JITTER_MASK);
+ return ret;
+}
+
static inline int max77686_i2c_get_driver_data(struct i2c_client *i2c,
const struct i2c_device_id *id)
{
} else
dev_info(max77686->dev, "device found\n");
+ if (max77686_set_low_jitter(max77686) < 0) {
+ dev_err(max77686->dev, "failed to configure low-jitter\n");
+ ret = -EIO;
+ goto err_mfd;
+ }
+
return ret;
err_mfd:
unsigned int reg_op_mode;
};
+enum max77686_prop_low_jitter {
+ MAX77686_PROP_LOW_JITTER_DFL = 0x00, /* use hw default */
+ MAX77686_PROP_LOW_JITTER_OFF = 0x01,
+ MAX77686_PROP_LOW_JITTER_ON = 0x02,
+ MAX77686_PROP_LOW_JITTER_END
+};
+
struct max77686_platform_data {
u8 ramp_delay;
struct max77686_regulator_data *regulators;
int num_regulators;
struct max77686_opmode_data *opmode_data;
+ /* low jitter property selection from the device tree */
+ u32 low_jitter;
+
/*
* GPIO-DVS feature is not enabled with the current version of
* MAX77686 driver. Buck2/3/4_voltages[0] is used as the default