cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

max8973-regulator.c (23134B)


      1/*
      2 * max8973-regulator.c -- Maxim max8973A
      3 *
      4 * Regulator driver for MAXIM 8973A DC-DC step-down switching regulator.
      5 *
      6 * Copyright (c) 2012, NVIDIA Corporation.
      7 *
      8 * Author: Laxman Dewangan <ldewangan@nvidia.com>
      9 *
     10 * This program is free software; you can redistribute it and/or
     11 * modify it under the terms of the GNU General Public License as
     12 * published by the Free Software Foundation version 2.
     13 *
     14 * This program is distributed "as is" WITHOUT ANY WARRANTY of any kind,
     15 * whether express or implied; without even the implied warranty of
     16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
     17 * General Public License for more details.
     18 *
     19 * You should have received a copy of the GNU General Public License
     20 * along with this program; if not, write to the Free Software
     21 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
     22 * 02111-1307, USA
     23 */
     24
     25#include <linux/kernel.h>
     26#include <linux/module.h>
     27#include <linux/init.h>
     28#include <linux/err.h>
     29#include <linux/of.h>
     30#include <linux/of_device.h>
     31#include <linux/platform_device.h>
     32#include <linux/regulator/driver.h>
     33#include <linux/regulator/machine.h>
     34#include <linux/regulator/max8973-regulator.h>
     35#include <linux/regulator/of_regulator.h>
     36#include <linux/gpio.h>
     37#include <linux/gpio/consumer.h>
     38#include <linux/of_gpio.h>
     39#include <linux/i2c.h>
     40#include <linux/slab.h>
     41#include <linux/regmap.h>
     42#include <linux/thermal.h>
     43#include <linux/irq.h>
     44#include <linux/interrupt.h>
     45
     46/* Register definitions */
     47#define MAX8973_VOUT					0x0
     48#define MAX8973_VOUT_DVS				0x1
     49#define MAX8973_CONTROL1				0x2
     50#define MAX8973_CONTROL2				0x3
     51#define MAX8973_CHIPID1					0x4
     52#define MAX8973_CHIPID2					0x5
     53
     54#define MAX8973_MAX_VOUT_REG				2
     55
     56/* MAX8973_VOUT */
     57#define MAX8973_VOUT_ENABLE				BIT(7)
     58#define MAX8973_VOUT_MASK				0x7F
     59
     60/* MAX8973_VOUT_DVS */
     61#define MAX8973_DVS_VOUT_MASK				0x7F
     62
     63/* MAX8973_CONTROL1 */
     64#define MAX8973_SNS_ENABLE				BIT(7)
     65#define MAX8973_FPWM_EN_M				BIT(6)
     66#define MAX8973_NFSR_ENABLE				BIT(5)
     67#define MAX8973_AD_ENABLE				BIT(4)
     68#define MAX8973_BIAS_ENABLE				BIT(3)
     69#define MAX8973_FREQSHIFT_9PER				BIT(2)
     70
     71#define MAX8973_RAMP_12mV_PER_US			0x0
     72#define MAX8973_RAMP_25mV_PER_US			0x1
     73#define MAX8973_RAMP_50mV_PER_US			0x2
     74#define MAX8973_RAMP_200mV_PER_US			0x3
     75#define MAX8973_RAMP_MASK				0x3
     76
     77/* MAX8973_CONTROL2 */
     78#define MAX8973_WDTMR_ENABLE				BIT(6)
     79#define MAX8973_DISCH_ENBABLE				BIT(5)
     80#define MAX8973_FT_ENABLE				BIT(4)
     81#define MAX77621_T_JUNCTION_120				BIT(7)
     82
     83#define MAX8973_CKKADV_TRIP_MASK			0xC
     84#define MAX8973_CKKADV_TRIP_DISABLE			0xC
     85#define MAX8973_CKKADV_TRIP_75mV_PER_US			0x0
     86#define MAX8973_CKKADV_TRIP_150mV_PER_US		0x4
     87#define MAX8973_CKKADV_TRIP_75mV_PER_US_HIST_DIS	0x8
     88#define MAX8973_CONTROL_CLKADV_TRIP_MASK		0x00030000
     89
     90#define MAX8973_INDUCTOR_MIN_30_PER			0x0
     91#define MAX8973_INDUCTOR_NOMINAL			0x1
     92#define MAX8973_INDUCTOR_PLUS_30_PER			0x2
     93#define MAX8973_INDUCTOR_PLUS_60_PER			0x3
     94#define MAX8973_CONTROL_INDUCTOR_VALUE_MASK		0x00300000
     95
     96#define MAX8973_MIN_VOLATGE				606250
     97#define MAX8973_MAX_VOLATGE				1400000
     98#define MAX8973_VOLATGE_STEP				6250
     99#define MAX8973_BUCK_N_VOLTAGE				0x80
    100
    101#define MAX77621_CHIPID_TJINT_S				BIT(0)
    102
    103#define MAX77621_NORMAL_OPERATING_TEMP			100000
    104#define MAX77621_TJINT_WARNING_TEMP_120			120000
    105#define MAX77621_TJINT_WARNING_TEMP_140			140000
    106
    107enum device_id {
    108	MAX8973,
    109	MAX77621
    110};
    111
    112/* Maxim 8973 chip information */
    113struct max8973_chip {
    114	struct device *dev;
    115	struct regulator_desc desc;
    116	struct regmap *regmap;
    117	bool enable_external_control;
    118	int dvs_gpio;
    119	int lru_index[MAX8973_MAX_VOUT_REG];
    120	int curr_vout_val[MAX8973_MAX_VOUT_REG];
    121	int curr_vout_reg;
    122	int curr_gpio_val;
    123	struct regulator_ops ops;
    124	enum device_id id;
    125	int junction_temp_warning;
    126	int irq;
    127	struct thermal_zone_device *tz_device;
    128};
    129
    130/*
    131 * find_voltage_set_register: Find new voltage configuration register (VOUT).
    132 * The finding of the new VOUT register will be based on the LRU mechanism.
    133 * Each VOUT register will have different voltage configured . This
    134 * Function will look if any of the VOUT register have requested voltage set
    135 * or not.
    136 *     - If it is already there then it will make that register as most
    137 *       recently used and return as found so that caller need not to set
    138 *       the VOUT register but need to set the proper gpios to select this
    139 *       VOUT register.
    140 *     - If requested voltage is not found then it will use the least
    141 *       recently mechanism to get new VOUT register for new configuration
    142 *       and will return not_found so that caller need to set new VOUT
    143 *       register and then gpios (both).
    144 */
    145static bool find_voltage_set_register(struct max8973_chip *tps,
    146		int req_vsel, int *vout_reg, int *gpio_val)
    147{
    148	int i;
    149	bool found = false;
    150	int new_vout_reg = tps->lru_index[MAX8973_MAX_VOUT_REG - 1];
    151	int found_index = MAX8973_MAX_VOUT_REG - 1;
    152
    153	for (i = 0; i < MAX8973_MAX_VOUT_REG; ++i) {
    154		if (tps->curr_vout_val[tps->lru_index[i]] == req_vsel) {
    155			new_vout_reg = tps->lru_index[i];
    156			found_index = i;
    157			found = true;
    158			goto update_lru_index;
    159		}
    160	}
    161
    162update_lru_index:
    163	for (i = found_index; i > 0; i--)
    164		tps->lru_index[i] = tps->lru_index[i - 1];
    165
    166	tps->lru_index[0] = new_vout_reg;
    167	*gpio_val = new_vout_reg;
    168	*vout_reg = MAX8973_VOUT + new_vout_reg;
    169	return found;
    170}
    171
    172static int max8973_dcdc_get_voltage_sel(struct regulator_dev *rdev)
    173{
    174	struct max8973_chip *max = rdev_get_drvdata(rdev);
    175	unsigned int data;
    176	int ret;
    177
    178	ret = regmap_read(max->regmap, max->curr_vout_reg, &data);
    179	if (ret < 0) {
    180		dev_err(max->dev, "register %d read failed, err = %d\n",
    181			max->curr_vout_reg, ret);
    182		return ret;
    183	}
    184	return data & MAX8973_VOUT_MASK;
    185}
    186
    187static int max8973_dcdc_set_voltage_sel(struct regulator_dev *rdev,
    188	     unsigned vsel)
    189{
    190	struct max8973_chip *max = rdev_get_drvdata(rdev);
    191	int ret;
    192	bool found = false;
    193	int vout_reg = max->curr_vout_reg;
    194	int gpio_val = max->curr_gpio_val;
    195
    196	/*
    197	 * If gpios are available to select the VOUT register then least
    198	 * recently used register for new configuration.
    199	 */
    200	if (gpio_is_valid(max->dvs_gpio))
    201		found = find_voltage_set_register(max, vsel,
    202					&vout_reg, &gpio_val);
    203
    204	if (!found) {
    205		ret = regmap_update_bits(max->regmap, vout_reg,
    206					MAX8973_VOUT_MASK, vsel);
    207		if (ret < 0) {
    208			dev_err(max->dev, "register %d update failed, err %d\n",
    209				 vout_reg, ret);
    210			return ret;
    211		}
    212		max->curr_vout_reg = vout_reg;
    213		max->curr_vout_val[gpio_val] = vsel;
    214	}
    215
    216	/* Select proper VOUT register vio gpios */
    217	if (gpio_is_valid(max->dvs_gpio)) {
    218		gpio_set_value_cansleep(max->dvs_gpio, gpio_val & 0x1);
    219		max->curr_gpio_val = gpio_val;
    220	}
    221	return 0;
    222}
    223
    224static int max8973_dcdc_set_mode(struct regulator_dev *rdev, unsigned int mode)
    225{
    226	struct max8973_chip *max = rdev_get_drvdata(rdev);
    227	int ret;
    228	int pwm;
    229
    230	/* Enable force PWM mode in FAST mode only. */
    231	switch (mode) {
    232	case REGULATOR_MODE_FAST:
    233		pwm = MAX8973_FPWM_EN_M;
    234		break;
    235
    236	case REGULATOR_MODE_NORMAL:
    237		pwm = 0;
    238		break;
    239
    240	default:
    241		return -EINVAL;
    242	}
    243
    244	ret = regmap_update_bits(max->regmap, MAX8973_CONTROL1,
    245				MAX8973_FPWM_EN_M, pwm);
    246	if (ret < 0)
    247		dev_err(max->dev, "register %d update failed, err %d\n",
    248				MAX8973_CONTROL1, ret);
    249	return ret;
    250}
    251
    252static unsigned int max8973_dcdc_get_mode(struct regulator_dev *rdev)
    253{
    254	struct max8973_chip *max = rdev_get_drvdata(rdev);
    255	unsigned int data;
    256	int ret;
    257
    258	ret = regmap_read(max->regmap, MAX8973_CONTROL1, &data);
    259	if (ret < 0) {
    260		dev_err(max->dev, "register %d read failed, err %d\n",
    261				MAX8973_CONTROL1, ret);
    262		return ret;
    263	}
    264	return (data & MAX8973_FPWM_EN_M) ?
    265		REGULATOR_MODE_FAST : REGULATOR_MODE_NORMAL;
    266}
    267
    268static int max8973_set_current_limit(struct regulator_dev *rdev,
    269		int min_ua, int max_ua)
    270{
    271	struct max8973_chip *max = rdev_get_drvdata(rdev);
    272	unsigned int val;
    273	int ret;
    274
    275	if (max_ua <= 9000000)
    276		val = MAX8973_CKKADV_TRIP_75mV_PER_US;
    277	else if (max_ua <= 12000000)
    278		val = MAX8973_CKKADV_TRIP_150mV_PER_US;
    279	else
    280		val = MAX8973_CKKADV_TRIP_DISABLE;
    281
    282	ret = regmap_update_bits(max->regmap, MAX8973_CONTROL2,
    283			MAX8973_CKKADV_TRIP_MASK, val);
    284	if (ret < 0) {
    285		dev_err(max->dev, "register %d update failed: %d\n",
    286				MAX8973_CONTROL2, ret);
    287		return ret;
    288	}
    289	return 0;
    290}
    291
    292static int max8973_get_current_limit(struct regulator_dev *rdev)
    293{
    294	struct max8973_chip *max = rdev_get_drvdata(rdev);
    295	unsigned int control2;
    296	int ret;
    297
    298	ret = regmap_read(max->regmap, MAX8973_CONTROL2, &control2);
    299	if (ret < 0) {
    300		dev_err(max->dev, "register %d read failed: %d\n",
    301				MAX8973_CONTROL2, ret);
    302		return ret;
    303	}
    304	switch (control2 & MAX8973_CKKADV_TRIP_MASK) {
    305	case MAX8973_CKKADV_TRIP_DISABLE:
    306		return 15000000;
    307	case MAX8973_CKKADV_TRIP_150mV_PER_US:
    308		return 12000000;
    309	case MAX8973_CKKADV_TRIP_75mV_PER_US:
    310		return 9000000;
    311	default:
    312		break;
    313	}
    314	return 9000000;
    315}
    316
    317static const unsigned int max8973_buck_ramp_table[] = {
    318	12000, 25000, 50000, 200000
    319};
    320
    321static const struct regulator_ops max8973_dcdc_ops = {
    322	.get_voltage_sel	= max8973_dcdc_get_voltage_sel,
    323	.set_voltage_sel	= max8973_dcdc_set_voltage_sel,
    324	.list_voltage		= regulator_list_voltage_linear,
    325	.set_mode		= max8973_dcdc_set_mode,
    326	.get_mode		= max8973_dcdc_get_mode,
    327	.set_voltage_time_sel	= regulator_set_voltage_time_sel,
    328	.set_ramp_delay		= regulator_set_ramp_delay_regmap,
    329};
    330
    331static int max8973_init_dcdc(struct max8973_chip *max,
    332			     struct max8973_regulator_platform_data *pdata)
    333{
    334	int ret;
    335	uint8_t	control1 = 0;
    336	uint8_t control2 = 0;
    337	unsigned int data;
    338
    339	ret = regmap_read(max->regmap, MAX8973_CONTROL1, &data);
    340	if (ret < 0) {
    341		dev_err(max->dev, "register %d read failed, err = %d",
    342				MAX8973_CONTROL1, ret);
    343		return ret;
    344	}
    345	control1 = data & MAX8973_RAMP_MASK;
    346	switch (control1) {
    347	case MAX8973_RAMP_12mV_PER_US:
    348		max->desc.ramp_delay = 12000;
    349		break;
    350	case MAX8973_RAMP_25mV_PER_US:
    351		max->desc.ramp_delay = 25000;
    352		break;
    353	case MAX8973_RAMP_50mV_PER_US:
    354		max->desc.ramp_delay = 50000;
    355		break;
    356	case MAX8973_RAMP_200mV_PER_US:
    357		max->desc.ramp_delay = 200000;
    358		break;
    359	}
    360
    361	if (pdata->control_flags & MAX8973_CONTROL_REMOTE_SENSE_ENABLE)
    362		control1 |= MAX8973_SNS_ENABLE;
    363
    364	if (!(pdata->control_flags & MAX8973_CONTROL_FALLING_SLEW_RATE_ENABLE))
    365		control1 |= MAX8973_NFSR_ENABLE;
    366
    367	if (pdata->control_flags & MAX8973_CONTROL_OUTPUT_ACTIVE_DISCH_ENABLE)
    368		control1 |= MAX8973_AD_ENABLE;
    369
    370	if (pdata->control_flags & MAX8973_CONTROL_BIAS_ENABLE) {
    371		control1 |= MAX8973_BIAS_ENABLE;
    372		max->desc.enable_time = 20;
    373	} else {
    374		max->desc.enable_time = 240;
    375	}
    376
    377	if (pdata->control_flags & MAX8973_CONTROL_FREQ_SHIFT_9PER_ENABLE)
    378		control1 |= MAX8973_FREQSHIFT_9PER;
    379
    380	if ((pdata->junction_temp_warning == MAX77621_TJINT_WARNING_TEMP_120) &&
    381	    (max->id == MAX77621))
    382		control2 |= MAX77621_T_JUNCTION_120;
    383
    384	if (!(pdata->control_flags & MAX8973_CONTROL_PULL_DOWN_ENABLE))
    385		control2 |= MAX8973_DISCH_ENBABLE;
    386
    387	/*  Clock advance trip configuration */
    388	switch (pdata->control_flags & MAX8973_CONTROL_CLKADV_TRIP_MASK) {
    389	case MAX8973_CONTROL_CLKADV_TRIP_DISABLED:
    390		control2 |= MAX8973_CKKADV_TRIP_DISABLE;
    391		break;
    392
    393	case MAX8973_CONTROL_CLKADV_TRIP_75mV_PER_US:
    394		control2 |= MAX8973_CKKADV_TRIP_75mV_PER_US;
    395		break;
    396
    397	case MAX8973_CONTROL_CLKADV_TRIP_150mV_PER_US:
    398		control2 |= MAX8973_CKKADV_TRIP_150mV_PER_US;
    399		break;
    400
    401	case MAX8973_CONTROL_CLKADV_TRIP_75mV_PER_US_HIST_DIS:
    402		control2 |= MAX8973_CKKADV_TRIP_75mV_PER_US_HIST_DIS;
    403		break;
    404	}
    405
    406	/* Configure inductor value */
    407	switch (pdata->control_flags & MAX8973_CONTROL_INDUCTOR_VALUE_MASK) {
    408	case MAX8973_CONTROL_INDUCTOR_VALUE_NOMINAL:
    409		control2 |= MAX8973_INDUCTOR_NOMINAL;
    410		break;
    411
    412	case MAX8973_CONTROL_INDUCTOR_VALUE_MINUS_30_PER:
    413		control2 |= MAX8973_INDUCTOR_MIN_30_PER;
    414		break;
    415
    416	case MAX8973_CONTROL_INDUCTOR_VALUE_PLUS_30_PER:
    417		control2 |= MAX8973_INDUCTOR_PLUS_30_PER;
    418		break;
    419
    420	case MAX8973_CONTROL_INDUCTOR_VALUE_PLUS_60_PER:
    421		control2 |= MAX8973_INDUCTOR_PLUS_60_PER;
    422		break;
    423	}
    424
    425	ret = regmap_write(max->regmap, MAX8973_CONTROL1, control1);
    426	if (ret < 0) {
    427		dev_err(max->dev, "register %d write failed, err = %d",
    428				MAX8973_CONTROL1, ret);
    429		return ret;
    430	}
    431
    432	ret = regmap_write(max->regmap, MAX8973_CONTROL2, control2);
    433	if (ret < 0) {
    434		dev_err(max->dev, "register %d write failed, err = %d",
    435				MAX8973_CONTROL2, ret);
    436		return ret;
    437	}
    438
    439	/* If external control is enabled then disable EN bit */
    440	if (max->enable_external_control && (max->id == MAX8973)) {
    441		ret = regmap_update_bits(max->regmap, MAX8973_VOUT,
    442						MAX8973_VOUT_ENABLE, 0);
    443		if (ret < 0)
    444			dev_err(max->dev, "register %d update failed, err = %d",
    445				MAX8973_VOUT, ret);
    446	}
    447	return ret;
    448}
    449
    450static int max8973_thermal_read_temp(void *data, int *temp)
    451{
    452	struct max8973_chip *mchip = data;
    453	unsigned int val;
    454	int ret;
    455
    456	ret = regmap_read(mchip->regmap, MAX8973_CHIPID1, &val);
    457	if (ret < 0) {
    458		dev_err(mchip->dev, "Failed to read register CHIPID1, %d", ret);
    459		return ret;
    460	}
    461
    462	/* +1 degC to trigger cool device */
    463	if (val & MAX77621_CHIPID_TJINT_S)
    464		*temp = mchip->junction_temp_warning + 1000;
    465	else
    466		*temp = MAX77621_NORMAL_OPERATING_TEMP;
    467
    468	return 0;
    469}
    470
    471static irqreturn_t max8973_thermal_irq(int irq, void *data)
    472{
    473	struct max8973_chip *mchip = data;
    474
    475	thermal_zone_device_update(mchip->tz_device,
    476				   THERMAL_EVENT_UNSPECIFIED);
    477
    478	return IRQ_HANDLED;
    479}
    480
    481static const struct thermal_zone_of_device_ops max77621_tz_ops = {
    482	.get_temp = max8973_thermal_read_temp,
    483};
    484
    485static int max8973_thermal_init(struct max8973_chip *mchip)
    486{
    487	struct thermal_zone_device *tzd;
    488	struct irq_data *irq_data;
    489	unsigned long irq_flags = 0;
    490	int ret;
    491
    492	if (mchip->id != MAX77621)
    493		return 0;
    494
    495	tzd = devm_thermal_zone_of_sensor_register(mchip->dev, 0, mchip,
    496						   &max77621_tz_ops);
    497	if (IS_ERR(tzd)) {
    498		ret = PTR_ERR(tzd);
    499		dev_err(mchip->dev, "Failed to register thermal sensor: %d\n",
    500			ret);
    501		return ret;
    502	}
    503
    504	if (mchip->irq <= 0)
    505		return 0;
    506
    507	irq_data = irq_get_irq_data(mchip->irq);
    508	if (irq_data)
    509		irq_flags = irqd_get_trigger_type(irq_data);
    510
    511	ret = devm_request_threaded_irq(mchip->dev, mchip->irq, NULL,
    512					max8973_thermal_irq,
    513					IRQF_ONESHOT | IRQF_SHARED | irq_flags,
    514					dev_name(mchip->dev), mchip);
    515	if (ret < 0) {
    516		dev_err(mchip->dev, "Failed to request irq %d, %d\n",
    517			mchip->irq, ret);
    518		return ret;
    519	}
    520
    521	return 0;
    522}
    523
    524static const struct regmap_config max8973_regmap_config = {
    525	.reg_bits		= 8,
    526	.val_bits		= 8,
    527	.max_register		= MAX8973_CHIPID2,
    528	.cache_type		= REGCACHE_RBTREE,
    529};
    530
    531static struct max8973_regulator_platform_data *max8973_parse_dt(
    532		struct device *dev)
    533{
    534	struct max8973_regulator_platform_data *pdata;
    535	struct device_node *np = dev->of_node;
    536	int ret;
    537	u32 pval;
    538	bool etr_enable;
    539	bool etr_sensitivity_high;
    540
    541	pdata = devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL);
    542	if (!pdata)
    543		return NULL;
    544
    545	pdata->enable_ext_control = of_property_read_bool(np,
    546						"maxim,externally-enable");
    547	pdata->dvs_gpio = of_get_named_gpio(np, "maxim,dvs-gpio", 0);
    548
    549	ret = of_property_read_u32(np, "maxim,dvs-default-state", &pval);
    550	if (!ret)
    551		pdata->dvs_def_state = pval;
    552
    553	if (of_property_read_bool(np, "maxim,enable-remote-sense"))
    554		pdata->control_flags  |= MAX8973_CONTROL_REMOTE_SENSE_ENABLE;
    555
    556	if (of_property_read_bool(np, "maxim,enable-falling-slew-rate"))
    557		pdata->control_flags  |=
    558				MAX8973_CONTROL_FALLING_SLEW_RATE_ENABLE;
    559
    560	if (of_property_read_bool(np, "maxim,enable-active-discharge"))
    561		pdata->control_flags  |=
    562				MAX8973_CONTROL_OUTPUT_ACTIVE_DISCH_ENABLE;
    563
    564	if (of_property_read_bool(np, "maxim,enable-frequency-shift"))
    565		pdata->control_flags  |= MAX8973_CONTROL_FREQ_SHIFT_9PER_ENABLE;
    566
    567	if (of_property_read_bool(np, "maxim,enable-bias-control"))
    568		pdata->control_flags  |= MAX8973_CONTROL_BIAS_ENABLE;
    569
    570	etr_enable = of_property_read_bool(np, "maxim,enable-etr");
    571	etr_sensitivity_high = of_property_read_bool(np,
    572				"maxim,enable-high-etr-sensitivity");
    573	if (etr_sensitivity_high)
    574		etr_enable = true;
    575
    576	if (etr_enable) {
    577		if (etr_sensitivity_high)
    578			pdata->control_flags |=
    579				MAX8973_CONTROL_CLKADV_TRIP_75mV_PER_US;
    580		else
    581			pdata->control_flags |=
    582				MAX8973_CONTROL_CLKADV_TRIP_150mV_PER_US;
    583	} else {
    584		pdata->control_flags |= MAX8973_CONTROL_CLKADV_TRIP_DISABLED;
    585	}
    586
    587	pdata->junction_temp_warning = MAX77621_TJINT_WARNING_TEMP_140;
    588	ret = of_property_read_u32(np, "junction-warn-millicelsius", &pval);
    589	if (!ret && (pval <= MAX77621_TJINT_WARNING_TEMP_120))
    590		pdata->junction_temp_warning = MAX77621_TJINT_WARNING_TEMP_120;
    591
    592	return pdata;
    593}
    594
    595static const struct of_device_id of_max8973_match_tbl[] = {
    596	{ .compatible = "maxim,max8973", .data = (void *)MAX8973, },
    597	{ .compatible = "maxim,max77621", .data = (void *)MAX77621, },
    598	{ },
    599};
    600MODULE_DEVICE_TABLE(of, of_max8973_match_tbl);
    601
    602static int max8973_probe(struct i2c_client *client,
    603			 const struct i2c_device_id *id)
    604{
    605	struct max8973_regulator_platform_data *pdata;
    606	struct regulator_init_data *ridata;
    607	struct regulator_config config = { };
    608	struct regulator_dev *rdev;
    609	struct max8973_chip *max;
    610	bool pdata_from_dt = false;
    611	unsigned int chip_id;
    612	struct gpio_desc *gpiod;
    613	enum gpiod_flags gflags;
    614	int ret;
    615
    616	pdata = dev_get_platdata(&client->dev);
    617
    618	if (!pdata && client->dev.of_node) {
    619		pdata = max8973_parse_dt(&client->dev);
    620		pdata_from_dt = true;
    621	}
    622
    623	if (!pdata) {
    624		dev_err(&client->dev, "No Platform data");
    625		return -EIO;
    626	}
    627
    628	if (pdata->dvs_gpio == -EPROBE_DEFER)
    629		return -EPROBE_DEFER;
    630
    631	max = devm_kzalloc(&client->dev, sizeof(*max), GFP_KERNEL);
    632	if (!max)
    633		return -ENOMEM;
    634
    635	max->regmap = devm_regmap_init_i2c(client, &max8973_regmap_config);
    636	if (IS_ERR(max->regmap)) {
    637		ret = PTR_ERR(max->regmap);
    638		dev_err(&client->dev, "regmap init failed, err %d\n", ret);
    639		return ret;
    640	}
    641
    642	if (client->dev.of_node) {
    643		const struct of_device_id *match;
    644
    645		match = of_match_device(of_match_ptr(of_max8973_match_tbl),
    646				&client->dev);
    647		if (!match)
    648			return -ENODATA;
    649		max->id = (u32)((uintptr_t)match->data);
    650	} else {
    651		max->id = id->driver_data;
    652	}
    653
    654	ret = regmap_read(max->regmap, MAX8973_CHIPID1, &chip_id);
    655	if (ret < 0) {
    656		dev_err(&client->dev, "register CHIPID1 read failed, %d", ret);
    657		return ret;
    658	}
    659
    660	dev_info(&client->dev, "CHIP-ID OTP: 0x%02x ID_M: 0x%02x\n",
    661			(chip_id >> 4) & 0xF, (chip_id >> 1) & 0x7);
    662
    663	i2c_set_clientdata(client, max);
    664	max->ops = max8973_dcdc_ops;
    665	max->dev = &client->dev;
    666	max->desc.name = id->name;
    667	max->desc.id = 0;
    668	max->desc.ops = &max->ops;
    669	max->desc.type = REGULATOR_VOLTAGE;
    670	max->desc.owner = THIS_MODULE;
    671	max->desc.min_uV = MAX8973_MIN_VOLATGE;
    672	max->desc.uV_step = MAX8973_VOLATGE_STEP;
    673	max->desc.n_voltages = MAX8973_BUCK_N_VOLTAGE;
    674	max->desc.ramp_reg = MAX8973_CONTROL1;
    675	max->desc.ramp_mask = MAX8973_RAMP_MASK;
    676	max->desc.ramp_delay_table = max8973_buck_ramp_table;
    677	max->desc.n_ramp_values = ARRAY_SIZE(max8973_buck_ramp_table);
    678
    679	max->dvs_gpio = (pdata->dvs_gpio) ? pdata->dvs_gpio : -EINVAL;
    680	max->enable_external_control = pdata->enable_ext_control;
    681	max->curr_gpio_val = pdata->dvs_def_state;
    682	max->curr_vout_reg = MAX8973_VOUT + pdata->dvs_def_state;
    683	max->junction_temp_warning = pdata->junction_temp_warning;
    684
    685	max->lru_index[0] = max->curr_vout_reg;
    686
    687	if (gpio_is_valid(max->dvs_gpio)) {
    688		int gpio_flags;
    689		int i;
    690
    691		gpio_flags = (pdata->dvs_def_state) ?
    692				GPIOF_OUT_INIT_HIGH : GPIOF_OUT_INIT_LOW;
    693		ret = devm_gpio_request_one(&client->dev, max->dvs_gpio,
    694				gpio_flags, "max8973-dvs");
    695		if (ret) {
    696			dev_err(&client->dev,
    697				"gpio_request for gpio %d failed, err = %d\n",
    698				max->dvs_gpio, ret);
    699			return ret;
    700		}
    701
    702		/*
    703		 * Initialize the lru index with vout_reg id
    704		 * The index 0 will be most recently used and
    705		 * set with the max->curr_vout_reg */
    706		for (i = 0; i < MAX8973_MAX_VOUT_REG; ++i)
    707			max->lru_index[i] = i;
    708		max->lru_index[0] = max->curr_vout_reg;
    709		max->lru_index[max->curr_vout_reg] = 0;
    710	} else {
    711		/*
    712		 * If there is no DVS GPIO, the VOUT register
    713		 * address is fixed.
    714		 */
    715		max->ops.set_voltage_sel = regulator_set_voltage_sel_regmap;
    716		max->ops.get_voltage_sel = regulator_get_voltage_sel_regmap;
    717		max->desc.vsel_reg = max->curr_vout_reg;
    718		max->desc.vsel_mask = MAX8973_VOUT_MASK;
    719	}
    720
    721	if (pdata_from_dt)
    722		pdata->reg_init_data = of_get_regulator_init_data(&client->dev,
    723					client->dev.of_node, &max->desc);
    724
    725	ridata = pdata->reg_init_data;
    726	switch (max->id) {
    727	case MAX8973:
    728		if (!pdata->enable_ext_control) {
    729			max->desc.enable_reg = MAX8973_VOUT;
    730			max->desc.enable_mask = MAX8973_VOUT_ENABLE;
    731			max->ops.enable = regulator_enable_regmap;
    732			max->ops.disable = regulator_disable_regmap;
    733			max->ops.is_enabled = regulator_is_enabled_regmap;
    734			break;
    735		}
    736
    737		if (ridata && (ridata->constraints.always_on ||
    738			       ridata->constraints.boot_on))
    739			gflags = GPIOD_OUT_HIGH;
    740		else
    741			gflags = GPIOD_OUT_LOW;
    742		gflags |= GPIOD_FLAGS_BIT_NONEXCLUSIVE;
    743		gpiod = devm_gpiod_get_optional(&client->dev,
    744						"maxim,enable",
    745						gflags);
    746		if (IS_ERR(gpiod))
    747			return PTR_ERR(gpiod);
    748		if (gpiod) {
    749			config.ena_gpiod = gpiod;
    750			max->enable_external_control = true;
    751		}
    752
    753		break;
    754
    755	case MAX77621:
    756		/*
    757		 * We do not let the core switch this regulator on/off,
    758		 * we just leave it on.
    759		 */
    760		gpiod = devm_gpiod_get_optional(&client->dev,
    761						"maxim,enable",
    762						GPIOD_OUT_HIGH);
    763		if (IS_ERR(gpiod))
    764			return PTR_ERR(gpiod);
    765		if (gpiod)
    766			max->enable_external_control = true;
    767
    768		max->desc.enable_reg = MAX8973_VOUT;
    769		max->desc.enable_mask = MAX8973_VOUT_ENABLE;
    770		max->ops.enable = regulator_enable_regmap;
    771		max->ops.disable = regulator_disable_regmap;
    772		max->ops.is_enabled = regulator_is_enabled_regmap;
    773		max->ops.set_current_limit = max8973_set_current_limit;
    774		max->ops.get_current_limit = max8973_get_current_limit;
    775		break;
    776	default:
    777		break;
    778	}
    779
    780	ret = max8973_init_dcdc(max, pdata);
    781	if (ret < 0) {
    782		dev_err(max->dev, "Max8973 Init failed, err = %d\n", ret);
    783		return ret;
    784	}
    785
    786	config.dev = &client->dev;
    787	config.init_data = pdata->reg_init_data;
    788	config.driver_data = max;
    789	config.of_node = client->dev.of_node;
    790	config.regmap = max->regmap;
    791
    792	/*
    793	 * Register the regulators
    794	 * Turn the GPIO descriptor over to the regulator core for
    795	 * lifecycle management if we pass an ena_gpiod.
    796	 */
    797	if (config.ena_gpiod)
    798		devm_gpiod_unhinge(&client->dev, config.ena_gpiod);
    799	rdev = devm_regulator_register(&client->dev, &max->desc, &config);
    800	if (IS_ERR(rdev)) {
    801		ret = PTR_ERR(rdev);
    802		dev_err(max->dev, "regulator register failed, err %d\n", ret);
    803		return ret;
    804	}
    805
    806	max8973_thermal_init(max);
    807	return 0;
    808}
    809
    810static const struct i2c_device_id max8973_id[] = {
    811	{.name = "max8973", .driver_data = MAX8973},
    812	{.name = "max77621", .driver_data = MAX77621},
    813	{},
    814};
    815MODULE_DEVICE_TABLE(i2c, max8973_id);
    816
    817static struct i2c_driver max8973_i2c_driver = {
    818	.driver = {
    819		.name = "max8973",
    820		.of_match_table = of_max8973_match_tbl,
    821	},
    822	.probe = max8973_probe,
    823	.id_table = max8973_id,
    824};
    825
    826static int __init max8973_init(void)
    827{
    828	return i2c_add_driver(&max8973_i2c_driver);
    829}
    830subsys_initcall(max8973_init);
    831
    832static void __exit max8973_cleanup(void)
    833{
    834	i2c_del_driver(&max8973_i2c_driver);
    835}
    836module_exit(max8973_cleanup);
    837
    838MODULE_AUTHOR("Laxman Dewangan <ldewangan@nvidia.com>");
    839MODULE_DESCRIPTION("MAX8973 voltage regulator driver");
    840MODULE_LICENSE("GPL v2");