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 --- |