max8973-regulator.c (e5451c8f8330e03ad3cfa16048b4daf961af434f) max8973-regulator.c (d2d5437bdfdde20a75bdf59db1c1a77721613b22)
1/*
2 * max8973-regulator.c -- Maxim max8973
3 *
4 * Regulator driver for MAXIM 8973 DC-DC step-down switching regulator.
5 *
6 * Copyright (c) 2012, NVIDIA Corporation.
7 *
8 * Author: Laxman Dewangan <ldewangan@nvidia.com>

--- 24 unchanged lines hidden (view full) ---

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/of_gpio.h>
38#include <linux/i2c.h>
39#include <linux/slab.h>
40#include <linux/regmap.h>
1/*
2 * max8973-regulator.c -- Maxim max8973
3 *
4 * Regulator driver for MAXIM 8973 DC-DC step-down switching regulator.
5 *
6 * Copyright (c) 2012, NVIDIA Corporation.
7 *
8 * Author: Laxman Dewangan <ldewangan@nvidia.com>

--- 24 unchanged lines hidden (view full) ---

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/of_gpio.h>
38#include <linux/i2c.h>
39#include <linux/slab.h>
40#include <linux/regmap.h>
41#include <linux/thermal.h>
42#include <linux/irq.h>
43#include <linux/interrupt.h>
41
42/* Register definitions */
43#define MAX8973_VOUT 0x0
44#define MAX8973_VOUT_DVS 0x1
45#define MAX8973_CONTROL1 0x2
46#define MAX8973_CONTROL2 0x3
47#define MAX8973_CHIPID1 0x4
48#define MAX8973_CHIPID2 0x5

--- 20 unchanged lines hidden (view full) ---

69#define MAX8973_RAMP_50mV_PER_US 0x2
70#define MAX8973_RAMP_200mV_PER_US 0x3
71#define MAX8973_RAMP_MASK 0x3
72
73/* MAX8973_CONTROL2 */
74#define MAX8973_WDTMR_ENABLE BIT(6)
75#define MAX8973_DISCH_ENBABLE BIT(5)
76#define MAX8973_FT_ENABLE BIT(4)
44
45/* Register definitions */
46#define MAX8973_VOUT 0x0
47#define MAX8973_VOUT_DVS 0x1
48#define MAX8973_CONTROL1 0x2
49#define MAX8973_CONTROL2 0x3
50#define MAX8973_CHIPID1 0x4
51#define MAX8973_CHIPID2 0x5

--- 20 unchanged lines hidden (view full) ---

72#define MAX8973_RAMP_50mV_PER_US 0x2
73#define MAX8973_RAMP_200mV_PER_US 0x3
74#define MAX8973_RAMP_MASK 0x3
75
76/* MAX8973_CONTROL2 */
77#define MAX8973_WDTMR_ENABLE BIT(6)
78#define MAX8973_DISCH_ENBABLE BIT(5)
79#define MAX8973_FT_ENABLE BIT(4)
80#define MAX77621_T_JUNCTION_120 BIT(7)
77
78#define MAX8973_CKKADV_TRIP_MASK 0xC
79#define MAX8973_CKKADV_TRIP_DISABLE 0xC
80#define MAX8973_CKKADV_TRIP_75mV_PER_US 0x0
81#define MAX8973_CKKADV_TRIP_150mV_PER_US 0x4
82#define MAX8973_CKKADV_TRIP_75mV_PER_US_HIST_DIS 0x8
83#define MAX8973_CONTROL_CLKADV_TRIP_MASK 0x00030000
84
85#define MAX8973_INDUCTOR_MIN_30_PER 0x0
86#define MAX8973_INDUCTOR_NOMINAL 0x1
87#define MAX8973_INDUCTOR_PLUS_30_PER 0x2
88#define MAX8973_INDUCTOR_PLUS_60_PER 0x3
89#define MAX8973_CONTROL_INDUCTOR_VALUE_MASK 0x00300000
90
91#define MAX8973_MIN_VOLATGE 606250
92#define MAX8973_MAX_VOLATGE 1400000
93#define MAX8973_VOLATGE_STEP 6250
94#define MAX8973_BUCK_N_VOLTAGE 0x80
95
81
82#define MAX8973_CKKADV_TRIP_MASK 0xC
83#define MAX8973_CKKADV_TRIP_DISABLE 0xC
84#define MAX8973_CKKADV_TRIP_75mV_PER_US 0x0
85#define MAX8973_CKKADV_TRIP_150mV_PER_US 0x4
86#define MAX8973_CKKADV_TRIP_75mV_PER_US_HIST_DIS 0x8
87#define MAX8973_CONTROL_CLKADV_TRIP_MASK 0x00030000
88
89#define MAX8973_INDUCTOR_MIN_30_PER 0x0
90#define MAX8973_INDUCTOR_NOMINAL 0x1
91#define MAX8973_INDUCTOR_PLUS_30_PER 0x2
92#define MAX8973_INDUCTOR_PLUS_60_PER 0x3
93#define MAX8973_CONTROL_INDUCTOR_VALUE_MASK 0x00300000
94
95#define MAX8973_MIN_VOLATGE 606250
96#define MAX8973_MAX_VOLATGE 1400000
97#define MAX8973_VOLATGE_STEP 6250
98#define MAX8973_BUCK_N_VOLTAGE 0x80
99
100#define MAX77621_CHIPID_TJINT_S BIT(0)
101
102#define MAX77621_NORMAL_OPERATING_TEMP 100000
103#define MAX77621_TJINT_WARNING_TEMP_120 120000
104#define MAX77621_TJINT_WARNING_TEMP_140 140000
105
96enum device_id {
97 MAX8973,
98 MAX77621
99};
100
101/* Maxim 8973 chip information */
102struct max8973_chip {
103 struct device *dev;
104 struct regulator_desc desc;
105 struct regmap *regmap;
106 bool enable_external_control;
107 int enable_gpio;
108 int dvs_gpio;
109 int lru_index[MAX8973_MAX_VOUT_REG];
110 int curr_vout_val[MAX8973_MAX_VOUT_REG];
111 int curr_vout_reg;
112 int curr_gpio_val;
113 struct regulator_ops ops;
114 enum device_id id;
106enum device_id {
107 MAX8973,
108 MAX77621
109};
110
111/* Maxim 8973 chip information */
112struct max8973_chip {
113 struct device *dev;
114 struct regulator_desc desc;
115 struct regmap *regmap;
116 bool enable_external_control;
117 int enable_gpio;
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;
115};
116
117/*
118 * find_voltage_set_register: Find new voltage configuration register (VOUT).
119 * The finding of the new VOUT register will be based on the LRU mechanism.
120 * Each VOUT register will have different voltage configured . This
121 * Function will look if any of the VOUT register have requested voltage set
122 * or not.

--- 263 unchanged lines hidden (view full) ---

386 max->desc.enable_time = 20;
387 } else {
388 max->desc.enable_time = 240;
389 }
390
391 if (pdata->control_flags & MAX8973_CONTROL_FREQ_SHIFT_9PER_ENABLE)
392 control1 |= MAX8973_FREQSHIFT_9PER;
393
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.

--- 263 unchanged lines hidden (view full) ---

399 max->desc.enable_time = 20;
400 } else {
401 max->desc.enable_time = 240;
402 }
403
404 if (pdata->control_flags & MAX8973_CONTROL_FREQ_SHIFT_9PER_ENABLE)
405 control1 |= MAX8973_FREQSHIFT_9PER;
406
407 if ((pdata->junction_temp_warning == MAX77621_TJINT_WARNING_TEMP_120) &&
408 (max->id == MAX77621))
409 control2 |= MAX77621_T_JUNCTION_120;
410
394 if (!(pdata->control_flags & MAX8973_CONTROL_PULL_DOWN_ENABLE))
395 control2 |= MAX8973_DISCH_ENBABLE;
396
397 /* Clock advance trip configuration */
398 switch (pdata->control_flags & MAX8973_CONTROL_CLKADV_TRIP_MASK) {
399 case MAX8973_CONTROL_CLKADV_TRIP_DISABLED:
400 control2 |= MAX8973_CKKADV_TRIP_DISABLE;
401 break;

--- 50 unchanged lines hidden (view full) ---

452 MAX8973_VOUT_ENABLE, 0);
453 if (ret < 0)
454 dev_err(max->dev, "register %d update failed, err = %d",
455 MAX8973_VOUT, ret);
456 }
457 return ret;
458}
459
411 if (!(pdata->control_flags & MAX8973_CONTROL_PULL_DOWN_ENABLE))
412 control2 |= MAX8973_DISCH_ENBABLE;
413
414 /* Clock advance trip configuration */
415 switch (pdata->control_flags & MAX8973_CONTROL_CLKADV_TRIP_MASK) {
416 case MAX8973_CONTROL_CLKADV_TRIP_DISABLED:
417 control2 |= MAX8973_CKKADV_TRIP_DISABLE;
418 break;

--- 50 unchanged lines hidden (view full) ---

469 MAX8973_VOUT_ENABLE, 0);
470 if (ret < 0)
471 dev_err(max->dev, "register %d update failed, err = %d",
472 MAX8973_VOUT, ret);
473 }
474 return ret;
475}
476
477static int max8973_thermal_read_temp(void *data, int *temp)
478{
479 struct max8973_chip *mchip = data;
480 unsigned int val;
481 int ret;
482
483 ret = regmap_read(mchip->regmap, MAX8973_CHIPID1, &val);
484 if (ret < 0) {
485 dev_err(mchip->dev, "Failed to read register CHIPID1, %d", ret);
486 return ret;
487 }
488
489 /* +1 degC to trigger cool devive */
490 if (val & MAX77621_CHIPID_TJINT_S)
491 *temp = mchip->junction_temp_warning + 1000;
492 else
493 *temp = MAX77621_NORMAL_OPERATING_TEMP;
494
495 return 0;
496}
497
498static irqreturn_t max8973_thermal_irq(int irq, void *data)
499{
500 struct max8973_chip *mchip = data;
501
502 thermal_zone_device_update(mchip->tz_device);
503
504 return IRQ_HANDLED;
505}
506
507static const struct thermal_zone_of_device_ops max77621_tz_ops = {
508 .get_temp = max8973_thermal_read_temp,
509};
510
511static int max8973_thermal_init(struct max8973_chip *mchip)
512{
513 struct thermal_zone_device *tzd;
514 struct irq_data *irq_data;
515 unsigned long irq_flags = 0;
516 int ret;
517
518 if (mchip->id != MAX77621)
519 return 0;
520
521 tzd = devm_thermal_zone_of_sensor_register(mchip->dev, 0, mchip,
522 &max77621_tz_ops);
523 if (IS_ERR(tzd)) {
524 ret = PTR_ERR(tzd);
525 dev_err(mchip->dev, "Failed to register thermal sensor: %d\n",
526 ret);
527 return ret;
528 }
529
530 if (mchip->irq <= 0)
531 return 0;
532
533 irq_data = irq_get_irq_data(mchip->irq);
534 if (irq_data)
535 irq_flags = irqd_get_trigger_type(irq_data);
536
537 ret = devm_request_threaded_irq(mchip->dev, mchip->irq, NULL,
538 max8973_thermal_irq,
539 IRQF_ONESHOT | IRQF_SHARED | irq_flags,
540 dev_name(mchip->dev), mchip);
541 if (ret < 0) {
542 dev_err(mchip->dev, "Failed to request irq %d, %d\n",
543 mchip->irq, ret);
544 return ret;
545 }
546
547 return 0;
548}
549
460static const struct regmap_config max8973_regmap_config = {
461 .reg_bits = 8,
462 .val_bits = 8,
463 .max_register = MAX8973_CHIPID2,
464 .cache_type = REGCACHE_RBTREE,
465};
466
467static struct max8973_regulator_platform_data *max8973_parse_dt(

--- 48 unchanged lines hidden (view full) ---

516 MAX8973_CONTROL_CLKADV_TRIP_75mV_PER_US;
517 else
518 pdata->control_flags |=
519 MAX8973_CONTROL_CLKADV_TRIP_150mV_PER_US;
520 } else {
521 pdata->control_flags |= MAX8973_CONTROL_CLKADV_TRIP_DISABLED;
522 }
523
550static const struct regmap_config max8973_regmap_config = {
551 .reg_bits = 8,
552 .val_bits = 8,
553 .max_register = MAX8973_CHIPID2,
554 .cache_type = REGCACHE_RBTREE,
555};
556
557static struct max8973_regulator_platform_data *max8973_parse_dt(

--- 48 unchanged lines hidden (view full) ---

606 MAX8973_CONTROL_CLKADV_TRIP_75mV_PER_US;
607 else
608 pdata->control_flags |=
609 MAX8973_CONTROL_CLKADV_TRIP_150mV_PER_US;
610 } else {
611 pdata->control_flags |= MAX8973_CONTROL_CLKADV_TRIP_DISABLED;
612 }
613
614 pdata->junction_temp_warning = MAX77621_TJINT_WARNING_TEMP_140;
615 ret = of_property_read_u32(np, "junction-warn-millicelsius", &pval);
616 if (!ret && (pval <= MAX77621_TJINT_WARNING_TEMP_120))
617 pdata->junction_temp_warning = MAX77621_TJINT_WARNING_TEMP_120;
618
524 return pdata;
525}
526
527static const struct of_device_id of_max8973_match_tbl[] = {
528 { .compatible = "maxim,max8973", .data = (void *)MAX8973, },
529 { .compatible = "maxim,max77621", .data = (void *)MAX77621, },
530 { },
531};

--- 71 unchanged lines hidden (view full) ---

603 max->desc.uV_step = MAX8973_VOLATGE_STEP;
604 max->desc.n_voltages = MAX8973_BUCK_N_VOLTAGE;
605
606 max->dvs_gpio = (pdata->dvs_gpio) ? pdata->dvs_gpio : -EINVAL;
607 max->enable_gpio = (pdata->enable_gpio) ? pdata->enable_gpio : -EINVAL;
608 max->enable_external_control = pdata->enable_ext_control;
609 max->curr_gpio_val = pdata->dvs_def_state;
610 max->curr_vout_reg = MAX8973_VOUT + pdata->dvs_def_state;
619 return pdata;
620}
621
622static const struct of_device_id of_max8973_match_tbl[] = {
623 { .compatible = "maxim,max8973", .data = (void *)MAX8973, },
624 { .compatible = "maxim,max77621", .data = (void *)MAX77621, },
625 { },
626};

--- 71 unchanged lines hidden (view full) ---

698 max->desc.uV_step = MAX8973_VOLATGE_STEP;
699 max->desc.n_voltages = MAX8973_BUCK_N_VOLTAGE;
700
701 max->dvs_gpio = (pdata->dvs_gpio) ? pdata->dvs_gpio : -EINVAL;
702 max->enable_gpio = (pdata->enable_gpio) ? pdata->enable_gpio : -EINVAL;
703 max->enable_external_control = pdata->enable_ext_control;
704 max->curr_gpio_val = pdata->dvs_def_state;
705 max->curr_vout_reg = MAX8973_VOUT + pdata->dvs_def_state;
706 max->junction_temp_warning = pdata->junction_temp_warning;
611
612 if (gpio_is_valid(max->enable_gpio))
613 max->enable_external_control = true;
614
615 max->lru_index[0] = max->curr_vout_reg;
616
617 if (gpio_is_valid(max->dvs_gpio)) {
618 int gpio_flags;

--- 94 unchanged lines hidden (view full) ---

713 /* Register the regulators */
714 rdev = devm_regulator_register(&client->dev, &max->desc, &config);
715 if (IS_ERR(rdev)) {
716 ret = PTR_ERR(rdev);
717 dev_err(max->dev, "regulator register failed, err %d\n", ret);
718 return ret;
719 }
720
707
708 if (gpio_is_valid(max->enable_gpio))
709 max->enable_external_control = true;
710
711 max->lru_index[0] = max->curr_vout_reg;
712
713 if (gpio_is_valid(max->dvs_gpio)) {
714 int gpio_flags;

--- 94 unchanged lines hidden (view full) ---

809 /* Register the regulators */
810 rdev = devm_regulator_register(&client->dev, &max->desc, &config);
811 if (IS_ERR(rdev)) {
812 ret = PTR_ERR(rdev);
813 dev_err(max->dev, "regulator register failed, err %d\n", ret);
814 return ret;
815 }
816
817 max8973_thermal_init(max);
721 return 0;
722}
723
724static const struct i2c_device_id max8973_id[] = {
725 {.name = "max8973", .driver_data = MAX8973},
726 {.name = "max77621", .driver_data = MAX77621},
727 {},
728};

--- 26 unchanged lines hidden ---
818 return 0;
819}
820
821static const struct i2c_device_id max8973_id[] = {
822 {.name = "max8973", .driver_data = MAX8973},
823 {.name = "max77621", .driver_data = MAX77621},
824 {},
825};

--- 26 unchanged lines hidden ---