| /* Copyright (c) 2013 The Chromium OS Authors. All rights reserved. |
| * Use of this source code is governed by a BSD-style license that can be |
| * found in the LICENSE file. |
| */ |
| /* Pit board-specific configuration */ |
| |
| #include "battery.h" |
| #include "chipset.h" |
| #include "common.h" |
| #include "extpower.h" |
| #include "gpio.h" |
| #include "i2c.h" |
| #include "keyboard_scan.h" |
| #include "keyboard_raw.h" |
| #include "lid_switch.h" |
| #include "pmu_tpschrome.h" |
| #include "power.h" |
| #include "registers.h" |
| #include "spi.h" |
| #include "timer.h" |
| #include "task.h" |
| #include "util.h" |
| |
| #define GPIO_KB_INPUT (GPIO_INPUT | GPIO_PULL_UP | GPIO_INT_BOTH) |
| #define GPIO_KB_OUTPUT GPIO_ODR_HIGH |
| |
| #include "gpio_list.h" |
| |
| /* Battery temperature ranges in degrees C */ |
| static const struct battery_info info = { |
| .start_charging_min_c = 0, |
| .start_charging_max_c = 45, |
| .charging_min_c = 0, |
| .charging_max_c = 60, |
| .discharging_min_c = -20, |
| .discharging_max_c = 70, |
| }; |
| |
| const struct battery_info *battery_get_info(void) |
| { |
| return &info; |
| } |
| |
| /* I2C ports */ |
| const struct i2c_port_t i2c_ports[] = { |
| {"master", I2C_PORT_MASTER, 100, GPIO_I2C1_SCL, GPIO_I2C1_SDA}, |
| }; |
| const unsigned int i2c_ports_used = ARRAY_SIZE(i2c_ports); |
| |
| struct keyboard_scan_config keyscan_config = { |
| .output_settle_us = 40, |
| .debounce_down_us = 6 * MSEC, |
| .debounce_up_us = 30 * MSEC, |
| .scan_period_us = 1500, |
| .min_post_scan_delay_us = 1000, |
| .poll_timeout_us = SECOND, |
| .actual_key_mask = { |
| 0x14, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xff, |
| 0xa4, 0xff, 0xf6, 0x55, 0xfa, 0xc8 /* full set */ |
| }, |
| }; |
| |
| int pmu_board_init(void) |
| { |
| int ver, failure = 0; |
| |
| /* Set fast charging timeout to 6 hours*/ |
| if (!failure) |
| failure = pmu_set_fastcharge(TIMEOUT_6HRS); |
| /* Enable external gpio CHARGER_EN control */ |
| if (!failure) |
| failure = pmu_enable_ext_control(1); |
| /* Disable force charging */ |
| if (!failure) |
| failure = pmu_enable_charger(0); |
| |
| /* Set NOITERM bit */ |
| if (!failure) |
| failure = pmu_low_current_charging(1); |
| |
| /* |
| * High temperature charging |
| * termination voltage: 2.1V |
| * termination current: 100% |
| */ |
| if (!failure) |
| failure = pmu_set_term_voltage(RANGE_T34, TERM_V2100); |
| if (!failure) |
| failure = pmu_set_term_current(RANGE_T34, TERM_I1000); |
| /* |
| * Standard temperature charging |
| * termination voltage: 2.1V |
| * termination current: 100% |
| */ |
| if (!failure) |
| failure = pmu_set_term_voltage(RANGE_T23, TERM_V2100); |
| if (!failure) |
| failure = pmu_set_term_current(RANGE_T23, TERM_I1000); |
| |
| /* |
| * Ignore TPSCHROME NTC reading in T40. This is snow board specific |
| * setting. Check: |
| * http://crosbug.com/p/12221 |
| * http://crosbug.com/p/13171 |
| */ |
| if (!failure) |
| failure = pmu_set_term_voltage(RANGE_T40, TERM_V2100); |
| if (!failure) |
| failure = pmu_set_term_current(RANGE_T40, TERM_I1000); |
| |
| /* Workaround init values before ES3 */ |
| if (pmu_version(&ver) || ver < 3) { |
| /* Termination current: 75% */ |
| if (!failure) |
| failure = pmu_set_term_current(RANGE_T34, TERM_I0750); |
| if (!failure) |
| failure = pmu_set_term_current(RANGE_T23, TERM_I0750); |
| if (!failure) |
| failure = pmu_set_term_current(RANGE_T40, TERM_I0750); |
| } |
| |
| return failure ? EC_ERROR_UNKNOWN : EC_SUCCESS; |
| } |