restore lost packages from 0.2.3 + fix overwritten 0.2.4 files
- Restore 29 recipe symlinks (libdrm, qtbase, dbus, sddm, pipewire, etc.) - Restore 33 patches (KDE, libdrm, mesa, pipewire, sddm, wireplumber) - Restore 20+ local/scripts (audit, lint, test, build helpers) - Restore src/cook/scheduler.rs, status.rs, gnu-config/ - Restore scripts/patch-inclusion-gate.sh, run_mini1.sh, validate-collision-log.sh - Recover TLC source from HEAD (was overwritten by 0.2.3 checkout) - Recover 11 local/docs plans from HEAD (were overwritten) - Recover qt6-wayland-smoke symlink from HEAD - Fix MOTD: remove garbled ASCII art, use clean text - Update version: 0.2.0 -> 0.2.4 in os-release, motd, config - Reduce filesystem_size: 1536 -> 512 MiB - Add ABSOLUTE RULE to AGENTS.md: never delete/ignore packages - Reduce pcid scheme log verbosity: info -> debug
This commit is contained in:
@@ -0,0 +1,45 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/*
|
||||
* bq2415x charger driver
|
||||
*
|
||||
* Copyright (C) 2011-2013 Pali Rohár <pali@kernel.org>
|
||||
*/
|
||||
|
||||
#ifndef BQ2415X_CHARGER_H
|
||||
#define BQ2415X_CHARGER_H
|
||||
|
||||
/*
|
||||
* This is platform data for bq2415x chip. It contains default board
|
||||
* voltages and currents which can be also later configured via sysfs. If
|
||||
* value is -1 then default chip value (specified in datasheet) will be
|
||||
* used.
|
||||
*
|
||||
* Value resistor_sense is needed for configuring charge and
|
||||
* termination current. If it is less or equal to zero, configuring charge
|
||||
* and termination current will not be possible.
|
||||
*
|
||||
* For automode support is needed to provide name of power supply device
|
||||
* in value notify_device. Device driver must immediately report property
|
||||
* POWER_SUPPLY_PROP_CURRENT_MAX when current changed.
|
||||
*/
|
||||
|
||||
/* Supported modes with maximal current limit */
|
||||
enum bq2415x_mode {
|
||||
BQ2415X_MODE_OFF, /* offline mode (charger disabled) */
|
||||
BQ2415X_MODE_NONE, /* unknown charger (100mA) */
|
||||
BQ2415X_MODE_HOST_CHARGER, /* usb host/hub charger (500mA) */
|
||||
BQ2415X_MODE_DEDICATED_CHARGER, /* dedicated charger (unlimited) */
|
||||
BQ2415X_MODE_BOOST, /* boost mode (charging disabled) */
|
||||
};
|
||||
|
||||
struct bq2415x_platform_data {
|
||||
int current_limit; /* mA */
|
||||
int weak_battery_voltage; /* mV */
|
||||
int battery_regulation_voltage; /* mV */
|
||||
int charge_current; /* mA */
|
||||
int termination_current; /* mA */
|
||||
int resistor_sense; /* m ohm */
|
||||
const char *notify_device; /* name */
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,15 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
/*
|
||||
* Platform data for the TI bq24190 battery charger driver.
|
||||
*/
|
||||
|
||||
#ifndef _BQ24190_CHARGER_H_
|
||||
#define _BQ24190_CHARGER_H_
|
||||
|
||||
#include <linux/regulator/machine.h>
|
||||
|
||||
struct bq24190_platform_data {
|
||||
const struct regulator_init_data *regulator_init_data;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,24 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/*
|
||||
*/
|
||||
|
||||
#ifndef __CHARGER_BQ24735_H_
|
||||
#define __CHARGER_BQ24735_H_
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/power_supply.h>
|
||||
|
||||
struct bq24735_platform {
|
||||
uint32_t charge_current;
|
||||
uint32_t charge_voltage;
|
||||
uint32_t input_current;
|
||||
|
||||
const char *name;
|
||||
|
||||
bool ext_control;
|
||||
|
||||
char **supplied_to;
|
||||
size_t num_supplicants;
|
||||
};
|
||||
|
||||
#endif /* __CHARGER_BQ24735_H_ */
|
||||
@@ -0,0 +1,15 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
/*
|
||||
* Platform data for the TI bq25890 battery charger driver.
|
||||
*/
|
||||
|
||||
#ifndef _BQ25890_CHARGER_H_
|
||||
#define _BQ25890_CHARGER_H_
|
||||
|
||||
struct regulator_init_data;
|
||||
|
||||
struct bq25890_platform_data {
|
||||
const struct regulator_init_data *regulator_init_data;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,81 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
#ifndef __LINUX_BQ27X00_BATTERY_H__
|
||||
#define __LINUX_BQ27X00_BATTERY_H__
|
||||
|
||||
#include <linux/power_supply.h>
|
||||
|
||||
enum bq27xxx_chip {
|
||||
BQ27000 = 1, /* bq27000, bq27200 */
|
||||
BQ27010, /* bq27010, bq27210 */
|
||||
BQ2750X, /* bq27500 deprecated alias */
|
||||
BQ2751X, /* bq27510, bq27520 deprecated alias */
|
||||
BQ2752X,
|
||||
BQ27500, /* bq27500/1 */
|
||||
BQ27510G1, /* bq27510G1 */
|
||||
BQ27510G2, /* bq27510G2 */
|
||||
BQ27510G3, /* bq27510G3 */
|
||||
BQ27520G1, /* bq27520G1 */
|
||||
BQ27520G2, /* bq27520G2 */
|
||||
BQ27520G3, /* bq27520G3 */
|
||||
BQ27520G4, /* bq27520G4 */
|
||||
BQ27521, /* bq27521 */
|
||||
BQ27530, /* bq27530, bq27531 */
|
||||
BQ27531,
|
||||
BQ27541, /* bq27541, bq27542, bq27546, bq27742 */
|
||||
BQ27542,
|
||||
BQ27546,
|
||||
BQ27742,
|
||||
BQ27545, /* bq27545 */
|
||||
BQ27411,
|
||||
BQ27421, /* bq27421, bq27441, bq27621 */
|
||||
BQ27425,
|
||||
BQ27426,
|
||||
BQ27441,
|
||||
BQ27621,
|
||||
BQ27Z561,
|
||||
BQ28Z610,
|
||||
BQ34Z100,
|
||||
BQ78Z100,
|
||||
};
|
||||
|
||||
struct bq27xxx_device_info;
|
||||
struct bq27xxx_access_methods {
|
||||
int (*read)(struct bq27xxx_device_info *di, u8 reg, bool single);
|
||||
int (*write)(struct bq27xxx_device_info *di, u8 reg, int value, bool single);
|
||||
int (*read_bulk)(struct bq27xxx_device_info *di, u8 reg, u8 *data, int len);
|
||||
int (*write_bulk)(struct bq27xxx_device_info *di, u8 reg, u8 *data, int len);
|
||||
};
|
||||
|
||||
struct bq27xxx_reg_cache {
|
||||
int capacity;
|
||||
int flags;
|
||||
};
|
||||
|
||||
struct bq27xxx_device_info {
|
||||
struct device *dev;
|
||||
enum bq27xxx_chip chip;
|
||||
u32 opts;
|
||||
const char *name;
|
||||
struct bq27xxx_dm_reg *dm_regs;
|
||||
u32 unseal_key;
|
||||
struct bq27xxx_access_methods bus;
|
||||
struct bq27xxx_reg_cache cache;
|
||||
int charge_design_full;
|
||||
int voltage_min_design;
|
||||
int voltage_max_design;
|
||||
bool removed;
|
||||
unsigned long last_update;
|
||||
union power_supply_propval last_status;
|
||||
struct delayed_work work;
|
||||
struct power_supply *bat;
|
||||
struct list_head list;
|
||||
struct mutex lock;
|
||||
u8 *regs;
|
||||
};
|
||||
|
||||
void bq27xxx_battery_update(struct bq27xxx_device_info *di);
|
||||
int bq27xxx_battery_setup(struct bq27xxx_device_info *di);
|
||||
void bq27xxx_battery_teardown(struct bq27xxx_device_info *di);
|
||||
extern const struct dev_pm_ops bq27xxx_battery_battery_pm_ops;
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,241 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
/*
|
||||
* Copyright (C) 2011 Samsung Electronics Co., Ltd.
|
||||
* MyungJoo.Ham <myungjoo.ham@samsung.com>
|
||||
*
|
||||
* Charger Manager.
|
||||
* This framework enables to control and multiple chargers and to
|
||||
* monitor charging even in the context of suspend-to-RAM with
|
||||
* an interface combining the chargers.
|
||||
*
|
||||
**/
|
||||
|
||||
#ifndef _CHARGER_MANAGER_H
|
||||
#define _CHARGER_MANAGER_H
|
||||
|
||||
#include <linux/power_supply.h>
|
||||
#include <linux/extcon.h>
|
||||
#include <linux/alarmtimer.h>
|
||||
|
||||
enum data_source {
|
||||
CM_BATTERY_PRESENT,
|
||||
CM_NO_BATTERY,
|
||||
CM_FUEL_GAUGE,
|
||||
CM_CHARGER_STAT,
|
||||
};
|
||||
|
||||
enum polling_modes {
|
||||
CM_POLL_DISABLE = 0,
|
||||
CM_POLL_ALWAYS,
|
||||
CM_POLL_EXTERNAL_POWER_ONLY,
|
||||
CM_POLL_CHARGING_ONLY,
|
||||
};
|
||||
|
||||
enum cm_batt_temp {
|
||||
CM_BATT_OK = 0,
|
||||
CM_BATT_OVERHEAT,
|
||||
CM_BATT_COLD,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct charger_cable
|
||||
* @extcon_name: the name of extcon device.
|
||||
* @name: the name of the cable connector
|
||||
* @extcon_dev: the extcon device.
|
||||
* @wq: the workqueue to control charger according to the state of
|
||||
* charger cable. If charger cable is attached, enable charger.
|
||||
* But if charger cable is detached, disable charger.
|
||||
* @nb: the notifier block to receive changed state from EXTCON
|
||||
* (External Connector) when charger cable is attached/detached.
|
||||
* @attached: the state of charger cable.
|
||||
* true: the charger cable is attached
|
||||
* false: the charger cable is detached
|
||||
* @charger: the instance of struct charger_regulator.
|
||||
* @cm: the Charger Manager representing the battery.
|
||||
*/
|
||||
struct charger_cable {
|
||||
const char *extcon_name;
|
||||
const char *name;
|
||||
struct extcon_dev *extcon_dev;
|
||||
u64 extcon_type;
|
||||
|
||||
/* The charger-manager use Extcon framework */
|
||||
struct work_struct wq;
|
||||
struct notifier_block nb;
|
||||
|
||||
/* The state of charger cable */
|
||||
bool attached;
|
||||
|
||||
struct charger_regulator *charger;
|
||||
|
||||
/*
|
||||
* Set min/max current of regulator to protect over-current issue
|
||||
* according to a kind of charger cable when cable is attached.
|
||||
*/
|
||||
int min_uA;
|
||||
int max_uA;
|
||||
|
||||
struct charger_manager *cm;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct charger_regulator
|
||||
* @regulator_name: the name of regulator for using charger.
|
||||
* @consumer: the regulator consumer for the charger.
|
||||
* @externally_control:
|
||||
* Set if the charger-manager cannot control charger,
|
||||
* the charger will be maintained with disabled state.
|
||||
* @cables:
|
||||
* the array of charger cables to enable/disable charger
|
||||
* and set current limit according to constraint data of
|
||||
* struct charger_cable if only charger cable included
|
||||
* in the array of charger cables is attached/detached.
|
||||
* @num_cables: the number of charger cables.
|
||||
* @attr_g: Attribute group for the charger(regulator)
|
||||
* @attr_name: "name" sysfs entry
|
||||
* @attr_state: "state" sysfs entry
|
||||
* @attr_externally_control: "externally_control" sysfs entry
|
||||
* @attrs: Arrays pointing to attr_name/state/externally_control for attr_g
|
||||
*/
|
||||
struct charger_regulator {
|
||||
/* The name of regulator for charging */
|
||||
const char *regulator_name;
|
||||
struct regulator *consumer;
|
||||
|
||||
/* charger never on when system is on */
|
||||
int externally_control;
|
||||
|
||||
/*
|
||||
* Store constraint information related to current limit,
|
||||
* each cable have different condition for charging.
|
||||
*/
|
||||
struct charger_cable *cables;
|
||||
int num_cables;
|
||||
|
||||
struct attribute_group attr_grp;
|
||||
struct device_attribute attr_name;
|
||||
struct device_attribute attr_state;
|
||||
struct device_attribute attr_externally_control;
|
||||
struct attribute *attrs[4];
|
||||
|
||||
struct charger_manager *cm;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct charger_desc
|
||||
* @psy_name: the name of power-supply-class for charger manager
|
||||
* @polling_mode:
|
||||
* Determine which polling mode will be used
|
||||
* @fullbatt_vchkdrop_uV:
|
||||
* Check voltage drop after the battery is fully charged.
|
||||
* If it has dropped more than fullbatt_vchkdrop_uV
|
||||
* CM will restart charging.
|
||||
* @fullbatt_uV: voltage in microvolt
|
||||
* If VBATT >= fullbatt_uV, it is assumed to be full.
|
||||
* @fullbatt_soc: state of Charge in %
|
||||
* If state of Charge >= fullbatt_soc, it is assumed to be full.
|
||||
* @fullbatt_full_capacity: full capacity measure
|
||||
* If full capacity of battery >= fullbatt_full_capacity,
|
||||
* it is assumed to be full.
|
||||
* @polling_interval_ms: interval in millisecond at which
|
||||
* charger manager will monitor battery health
|
||||
* @battery_present:
|
||||
* Specify where information for existence of battery can be obtained
|
||||
* @psy_charger_stat: the names of power-supply for chargers
|
||||
* @num_charger_regulator: the number of entries in charger_regulators
|
||||
* @charger_regulators: array of charger regulators
|
||||
* @psy_fuel_gauge: the name of power-supply for fuel gauge
|
||||
* @thermal_zone : the name of thermal zone for battery
|
||||
* @temp_min : Minimum battery temperature for charging.
|
||||
* @temp_max : Maximum battery temperature for charging.
|
||||
* @temp_diff : Temperature difference to restart charging.
|
||||
* @measure_battery_temp:
|
||||
* true: measure battery temperature
|
||||
* false: measure ambient temperature
|
||||
* @charging_max_duration_ms: Maximum possible duration for charging
|
||||
* If whole charging duration exceed 'charging_max_duration_ms',
|
||||
* cm stop charging.
|
||||
* @discharging_max_duration_ms:
|
||||
* Maximum possible duration for discharging with charger cable
|
||||
* after full-batt. If discharging duration exceed 'discharging
|
||||
* max_duration_ms', cm start charging.
|
||||
*/
|
||||
struct charger_desc {
|
||||
const char *psy_name;
|
||||
|
||||
enum polling_modes polling_mode;
|
||||
unsigned int polling_interval_ms;
|
||||
|
||||
unsigned int fullbatt_vchkdrop_uV;
|
||||
unsigned int fullbatt_uV;
|
||||
unsigned int fullbatt_soc;
|
||||
unsigned int fullbatt_full_capacity;
|
||||
|
||||
enum data_source battery_present;
|
||||
|
||||
const char **psy_charger_stat;
|
||||
|
||||
int num_charger_regulators;
|
||||
struct charger_regulator *charger_regulators;
|
||||
const struct attribute_group **sysfs_groups;
|
||||
|
||||
const char *psy_fuel_gauge;
|
||||
|
||||
const char *thermal_zone;
|
||||
|
||||
int temp_min;
|
||||
int temp_max;
|
||||
int temp_diff;
|
||||
|
||||
bool measure_battery_temp;
|
||||
|
||||
u32 charging_max_duration_ms;
|
||||
u32 discharging_max_duration_ms;
|
||||
};
|
||||
|
||||
#define PSY_NAME_MAX 30
|
||||
|
||||
/**
|
||||
* struct charger_manager
|
||||
* @entry: entry for list
|
||||
* @dev: device pointer
|
||||
* @desc: instance of charger_desc
|
||||
* @fuel_gauge: power_supply for fuel gauge
|
||||
* @charger_stat: array of power_supply for chargers
|
||||
* @tzd_batt : thermal zone device for battery
|
||||
* @charger_enabled: the state of charger
|
||||
* @emergency_stop:
|
||||
* When setting true, stop charging
|
||||
* @psy_name_buf: the name of power-supply-class for charger manager
|
||||
* @charger_psy: power_supply for charger manager
|
||||
* @status_save_ext_pwr_inserted:
|
||||
* saved status of external power before entering suspend-to-RAM
|
||||
* @status_save_batt:
|
||||
* saved status of battery before entering suspend-to-RAM
|
||||
* @charging_start_time: saved start time of enabling charging
|
||||
* @charging_end_time: saved end time of disabling charging
|
||||
* @battery_status: Current battery status
|
||||
*/
|
||||
struct charger_manager {
|
||||
struct list_head entry;
|
||||
struct device *dev;
|
||||
struct charger_desc *desc;
|
||||
|
||||
#ifdef CONFIG_THERMAL
|
||||
struct thermal_zone_device *tzd_batt;
|
||||
#endif
|
||||
bool charger_enabled;
|
||||
|
||||
int emergency_stop;
|
||||
|
||||
char psy_name_buf[PSY_NAME_MAX + 1];
|
||||
struct power_supply_desc charger_psy_desc;
|
||||
struct power_supply *charger_psy;
|
||||
|
||||
u64 charging_start_time;
|
||||
u64 charging_end_time;
|
||||
|
||||
int battery_status;
|
||||
};
|
||||
|
||||
#endif /* _CHARGER_MANAGER_H */
|
||||
@@ -0,0 +1,26 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/*
|
||||
* Copyright (C) 2010, Lars-Peter Clausen <lars@metafoo.de>
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_POWER_GPIO_CHARGER_H__
|
||||
#define __LINUX_POWER_GPIO_CHARGER_H__
|
||||
|
||||
#include <linux/power_supply.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
/**
|
||||
* struct gpio_charger_platform_data - platform_data for gpio_charger devices
|
||||
* @name: Name for the chargers power_supply device
|
||||
* @type: Type of the charger
|
||||
* @supplied_to: Array of battery names to which this chargers supplies power
|
||||
* @num_supplicants: Number of entries in the supplied_to array
|
||||
*/
|
||||
struct gpio_charger_platform_data {
|
||||
const char *name;
|
||||
enum power_supply_type type;
|
||||
char **supplied_to;
|
||||
size_t num_supplicants;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,15 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/*
|
||||
* Copyright (C) 2009, Jiejing Zhang <kzjeef@gmail.com>
|
||||
*/
|
||||
|
||||
#ifndef __JZ4740_BATTERY_H
|
||||
#define __JZ4740_BATTERY_H
|
||||
|
||||
struct jz_battery_platform_data {
|
||||
struct power_supply_info info;
|
||||
int gpio_charge; /* GPIO port of Charger state */
|
||||
int gpio_charge_active_low;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,287 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/*
|
||||
* Fuel gauge driver for Maxim 17042 / 8966 / 8997
|
||||
* Note that Maxim 8966 and 8997 are mfd and this is its subdevice.
|
||||
*
|
||||
* Copyright (C) 2011 Samsung Electronics
|
||||
* MyungJoo Ham <myungjoo.ham@samsung.com>
|
||||
*/
|
||||
|
||||
#ifndef __MAX17042_BATTERY_H_
|
||||
#define __MAX17042_BATTERY_H_
|
||||
|
||||
#define MAX17042_STATUS_BattAbsent (1 << 3)
|
||||
#define MAX17042_BATTERY_FULL (95) /* Recommend. FullSOCThr value */
|
||||
#define MAX17042_DEFAULT_SNS_RESISTOR (10000)
|
||||
#define MAX17042_DEFAULT_VMIN (3000)
|
||||
#define MAX17042_DEFAULT_VMAX (4500) /* LiHV cell max */
|
||||
#define MAX17042_DEFAULT_TEMP_MIN (0) /* For sys without temp sensor */
|
||||
#define MAX17042_DEFAULT_TEMP_MAX (700) /* 70 degrees Celcius */
|
||||
#define MAX17042_DEFAULT_TASK_PERIOD (5760)
|
||||
|
||||
/* Consider RepCap which is less then 10 units below FullCAP full */
|
||||
#define MAX17042_FULL_THRESHOLD 10
|
||||
|
||||
#define MAX17042_CHARACTERIZATION_DATA_SIZE 48
|
||||
|
||||
enum max17042_register {
|
||||
MAX17042_STATUS = 0x00,
|
||||
MAX17042_VALRT_Th = 0x01,
|
||||
MAX17042_TALRT_Th = 0x02,
|
||||
MAX17042_SALRT_Th = 0x03,
|
||||
MAX17042_AtRate = 0x04,
|
||||
MAX17042_RepCap = 0x05,
|
||||
MAX17042_RepSOC = 0x06,
|
||||
MAX17042_Age = 0x07,
|
||||
MAX17042_TEMP = 0x08,
|
||||
MAX17042_VCELL = 0x09,
|
||||
MAX17042_Current = 0x0A,
|
||||
MAX17042_AvgCurrent = 0x0B,
|
||||
|
||||
MAX17042_SOC = 0x0D,
|
||||
MAX17042_AvSOC = 0x0E,
|
||||
MAX17042_RemCap = 0x0F,
|
||||
MAX17042_FullCAP = 0x10,
|
||||
MAX17042_TTE = 0x11,
|
||||
MAX17042_V_empty = 0x12,
|
||||
|
||||
MAX17042_RSLOW = 0x14,
|
||||
|
||||
MAX17042_AvgTA = 0x16,
|
||||
MAX17042_Cycles = 0x17,
|
||||
MAX17042_DesignCap = 0x18,
|
||||
MAX17042_AvgVCELL = 0x19,
|
||||
MAX17042_MinMaxTemp = 0x1A,
|
||||
MAX17042_MinMaxVolt = 0x1B,
|
||||
MAX17042_MinMaxCurr = 0x1C,
|
||||
MAX17042_CONFIG = 0x1D,
|
||||
MAX17042_ICHGTerm = 0x1E,
|
||||
MAX17042_AvCap = 0x1F,
|
||||
MAX17042_ManName = 0x20,
|
||||
MAX17042_DevName = 0x21,
|
||||
|
||||
MAX17042_FullCAPNom = 0x23,
|
||||
MAX17042_TempNom = 0x24,
|
||||
MAX17042_TempLim = 0x25,
|
||||
MAX17042_TempHot = 0x26,
|
||||
MAX17042_AIN = 0x27,
|
||||
MAX17042_LearnCFG = 0x28,
|
||||
MAX17042_FilterCFG = 0x29,
|
||||
MAX17042_RelaxCFG = 0x2A,
|
||||
MAX17042_MiscCFG = 0x2B,
|
||||
MAX17042_TGAIN = 0x2C,
|
||||
MAX17042_TOFF = 0x2D,
|
||||
MAX17042_CGAIN = 0x2E,
|
||||
MAX17042_COFF = 0x2F,
|
||||
|
||||
MAX17042_MaskSOC = 0x32,
|
||||
MAX17042_SOC_empty = 0x33,
|
||||
MAX17042_T_empty = 0x34,
|
||||
|
||||
MAX17042_FullCAP0 = 0x35,
|
||||
MAX17042_IAvg_empty = 0x36,
|
||||
MAX17042_FCTC = 0x37,
|
||||
MAX17042_RCOMP0 = 0x38,
|
||||
MAX17042_TempCo = 0x39,
|
||||
MAX17042_EmptyTempCo = 0x3A,
|
||||
MAX17042_K_empty0 = 0x3B,
|
||||
MAX17042_TaskPeriod = 0x3C,
|
||||
MAX17042_FSTAT = 0x3D,
|
||||
|
||||
MAX17042_SHDNTIMER = 0x3F,
|
||||
|
||||
MAX17042_dQacc = 0x45,
|
||||
MAX17042_dPacc = 0x46,
|
||||
|
||||
MAX17042_VFSOC0 = 0x48,
|
||||
|
||||
MAX17042_QH = 0x4D,
|
||||
MAX17042_QL = 0x4E,
|
||||
|
||||
MAX17042_VFSOC0Enable = 0x60,
|
||||
MAX17042_MLOCKReg1 = 0x62,
|
||||
MAX17042_MLOCKReg2 = 0x63,
|
||||
|
||||
MAX17042_MODELChrTbl = 0x80,
|
||||
|
||||
MAX17042_OCV = 0xEE,
|
||||
|
||||
MAX17042_OCVInternal = 0xFB, /* MAX17055/77759 VFOCV */
|
||||
|
||||
MAX17042_VFSOC = 0xFF,
|
||||
};
|
||||
|
||||
/* Registers specific to max17055 only */
|
||||
enum max17055_register {
|
||||
MAX17055_QRes = 0x0C,
|
||||
MAX17055_RCell = 0x14,
|
||||
MAX17055_TTF = 0x20,
|
||||
MAX17055_DieTemp = 0x34,
|
||||
MAX17055_USER_MEM = 0x40,
|
||||
MAX17055_RGAIN = 0x43,
|
||||
|
||||
MAX17055_ConvgCfg = 0x49,
|
||||
MAX17055_VFRemCap = 0x4A,
|
||||
|
||||
MAX17055_STATUS2 = 0xB0,
|
||||
MAX17055_POWER = 0xB1,
|
||||
MAX17055_ID = 0xB2,
|
||||
MAX17055_AvgPower = 0xB3,
|
||||
MAX17055_IAlrtTh = 0xB4,
|
||||
MAX17055_TTFCfg = 0xB5,
|
||||
MAX17055_CVMixCap = 0xB6,
|
||||
MAX17055_CVHalfTime = 0xB7,
|
||||
MAX17055_CGTempCo = 0xB8,
|
||||
MAX17055_Curve = 0xB9,
|
||||
MAX17055_HibCfg = 0xBA,
|
||||
MAX17055_Config2 = 0xBB,
|
||||
MAX17055_VRipple = 0xBC,
|
||||
MAX17055_RippleCfg = 0xBD,
|
||||
MAX17055_TimerH = 0xBE,
|
||||
|
||||
MAX17055_RSense = 0xD0,
|
||||
MAX17055_ScOcvLim = 0xD1,
|
||||
|
||||
MAX17055_SOCHold = 0xD3,
|
||||
MAX17055_MaxPeakPwr = 0xD4,
|
||||
MAX17055_SusPeakPwr = 0xD5,
|
||||
MAX17055_PackResistance = 0xD6,
|
||||
MAX17055_SysResistance = 0xD7,
|
||||
MAX17055_MinSysV = 0xD8,
|
||||
MAX17055_MPPCurrent = 0xD9,
|
||||
MAX17055_SPPCurrent = 0xDA,
|
||||
MAX17055_ModelCfg = 0xDB,
|
||||
MAX17055_AtQResidual = 0xDC,
|
||||
MAX17055_AtTTE = 0xDD,
|
||||
MAX17055_AtAvSOC = 0xDE,
|
||||
MAX17055_AtAvCap = 0xDF,
|
||||
};
|
||||
|
||||
/* Registers specific to max17047/50/55/77759 */
|
||||
enum max17047_register {
|
||||
MAX17047_QRTbl00 = 0x12,
|
||||
MAX17047_FullSOCThr = 0x13,
|
||||
MAX17047_QRTbl10 = 0x22,
|
||||
MAX17047_QRTbl20 = 0x32,
|
||||
MAX17047_V_empty = 0x3A,
|
||||
MAX17047_TIMER = 0x3E,
|
||||
MAX17047_QRTbl30 = 0x42,
|
||||
};
|
||||
|
||||
enum max77759_register {
|
||||
MAX77759_AvgTA0 = 0x26,
|
||||
MAX77759_AtTTF = 0x33,
|
||||
MAX77759_Tconvert = 0x34,
|
||||
MAX77759_AvgCurrent0 = 0x3B,
|
||||
MAX77759_THMHOT = 0x40,
|
||||
MAX77759_CTESample = 0x41,
|
||||
MAX77759_ISys = 0x43,
|
||||
MAX77759_AvgVCell0 = 0x44,
|
||||
MAX77759_RlxSOC = 0x47,
|
||||
MAX77759_AvgISys = 0x4B,
|
||||
MAX77759_QH0 = 0x4C,
|
||||
MAX77759_MixAtFull = 0x4F,
|
||||
MAX77759_VSys = 0xB1,
|
||||
MAX77759_TAlrtTh2 = 0xB2,
|
||||
MAX77759_VByp = 0xB3,
|
||||
MAX77759_IIn = 0xD0,
|
||||
};
|
||||
|
||||
enum max170xx_chip_type {
|
||||
MAXIM_DEVICE_TYPE_UNKNOWN = 0,
|
||||
MAXIM_DEVICE_TYPE_MAX17042,
|
||||
MAXIM_DEVICE_TYPE_MAX17047,
|
||||
MAXIM_DEVICE_TYPE_MAX17050,
|
||||
MAXIM_DEVICE_TYPE_MAX17055,
|
||||
MAXIM_DEVICE_TYPE_MAX77759,
|
||||
|
||||
MAXIM_DEVICE_TYPE_NUM
|
||||
};
|
||||
|
||||
/*
|
||||
* used for setting a register to a desired value
|
||||
* addr : address for a register
|
||||
* data : setting value for the register
|
||||
*/
|
||||
struct max17042_reg_data {
|
||||
u8 addr;
|
||||
u16 data;
|
||||
};
|
||||
|
||||
struct max17042_config_data {
|
||||
/* External current sense resistor value in milli-ohms */
|
||||
u32 cur_sense_val;
|
||||
|
||||
/* A/D measurement */
|
||||
u16 tgain; /* 0x2C */
|
||||
u16 toff; /* 0x2D */
|
||||
u16 cgain; /* 0x2E */
|
||||
u16 coff; /* 0x2F */
|
||||
|
||||
/* Alert / Status */
|
||||
u16 valrt_thresh; /* 0x01 */
|
||||
u16 talrt_thresh; /* 0x02 */
|
||||
u16 soc_alrt_thresh; /* 0x03 */
|
||||
u16 config; /* 0x01D */
|
||||
u16 shdntimer; /* 0x03F */
|
||||
|
||||
/* App data */
|
||||
u16 full_soc_thresh; /* 0x13 */
|
||||
u16 design_cap; /* 0x18 */
|
||||
u16 ichgt_term; /* 0x1E */
|
||||
|
||||
/* MG3 config */
|
||||
u16 at_rate; /* 0x04 */
|
||||
u16 learn_cfg; /* 0x28 */
|
||||
u16 filter_cfg; /* 0x29 */
|
||||
u16 relax_cfg; /* 0x2A */
|
||||
u16 misc_cfg; /* 0x2B */
|
||||
u16 masksoc; /* 0x32 */
|
||||
|
||||
/* MG3 save and restore */
|
||||
u16 fullcap; /* 0x10 */
|
||||
u16 fullcapnom; /* 0x23 */
|
||||
u16 socempty; /* 0x33 */
|
||||
u16 iavg_empty; /* 0x36 */
|
||||
u16 dqacc; /* 0x45 */
|
||||
u16 dpacc; /* 0x46 */
|
||||
u16 qrtbl00; /* 0x12 */
|
||||
u16 qrtbl10; /* 0x22 */
|
||||
u16 qrtbl20; /* 0x32 */
|
||||
u16 qrtbl30; /* 0x42 */
|
||||
|
||||
/* Cell technology from power_supply.h */
|
||||
u16 cell_technology;
|
||||
|
||||
/* Cell Data */
|
||||
u16 vempty; /* 0x12 */
|
||||
u16 temp_nom; /* 0x24 */
|
||||
u16 temp_lim; /* 0x25 */
|
||||
u16 fctc; /* 0x37 */
|
||||
u16 rcomp0; /* 0x38 */
|
||||
u16 tcompc0; /* 0x39 */
|
||||
u16 empty_tempco; /* 0x3A */
|
||||
u16 kempty0; /* 0x3B */
|
||||
u16 cell_char_tbl[MAX17042_CHARACTERIZATION_DATA_SIZE];
|
||||
} __packed;
|
||||
|
||||
struct max17042_platform_data {
|
||||
struct max17042_reg_data *init_data;
|
||||
struct max17042_config_data *config_data;
|
||||
int num_init_data; /* Number of enties in init_data array */
|
||||
bool enable_current_sense;
|
||||
bool enable_por_init; /* Use POR init from Maxim appnote */
|
||||
|
||||
/*
|
||||
* R_sns in micro-ohms.
|
||||
* default 10000 (if r_sns = 0) as it is the recommended value by
|
||||
* the datasheet although it can be changed by board designers.
|
||||
*/
|
||||
unsigned int r_sns;
|
||||
int vmin; /* in millivolts */
|
||||
int vmax; /* in millivolts */
|
||||
int temp_min; /* in tenths of degree Celsius */
|
||||
int temp_max; /* in tenths of degree Celsius */
|
||||
};
|
||||
|
||||
#endif /* __MAX17042_BATTERY_H_ */
|
||||
@@ -0,0 +1,193 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* Maxim MAX77705 definitions.
|
||||
*
|
||||
* Copyright (C) 2015 Samsung Electronics, Inc.
|
||||
* Copyright (C) 2025 Dzmitry Sankouski <dsankouski@gmail.com>
|
||||
*/
|
||||
|
||||
#ifndef __MAX77705_CHARGER_H
|
||||
#define __MAX77705_CHARGER_H __FILE__
|
||||
|
||||
#include <linux/regmap.h>
|
||||
|
||||
/* MAX77705_CHG_REG_CHG_INT */
|
||||
#define MAX77705_BYP_I (0)
|
||||
#define MAX77705_INP_LIMIT_I (1)
|
||||
#define MAX77705_BATP_I (2)
|
||||
#define MAX77705_BAT_I (3)
|
||||
#define MAX77705_CHG_I (4)
|
||||
#define MAX77705_WCIN_I (5)
|
||||
#define MAX77705_CHGIN_I (6)
|
||||
#define MAX77705_AICL_I (7)
|
||||
|
||||
/* MAX77705_CHG_REG_CHG_INT_OK */
|
||||
#define MAX77705_BYP_OK BIT(MAX77705_BYP_I)
|
||||
#define MAX77705_DISQBAT_OK BIT(MAX77705_INP_LIMIT_I)
|
||||
#define MAX77705_BATP_OK BIT(MAX77705_BATP_I)
|
||||
#define MAX77705_BAT_OK BIT(MAX77705_BAT_I)
|
||||
#define MAX77705_CHG_OK BIT(MAX77705_CHG_I)
|
||||
#define MAX77705_WCIN_OK BIT(MAX77705_WCIN_I)
|
||||
#define MAX77705_CHGIN_OK BIT(MAX77705_CHGIN_I)
|
||||
#define MAX77705_AICL_OK BIT(MAX77705_AICL_I)
|
||||
|
||||
/* MAX77705_CHG_REG_DETAILS_00 */
|
||||
#define MAX77705_BATP_DTLS BIT(0)
|
||||
#define MAX77705_WCIN_DTLS GENMASK(4, 3)
|
||||
#define MAX77705_WCIN_DTLS_SHIFT 3
|
||||
#define MAX77705_CHGIN_DTLS GENMASK(6, 5)
|
||||
#define MAX77705_CHGIN_DTLS_SHIFT 5
|
||||
|
||||
/* MAX77705_CHG_REG_DETAILS_01 */
|
||||
#define MAX77705_CHG_DTLS GENMASK(3, 0)
|
||||
#define MAX77705_CHG_DTLS_SHIFT 0
|
||||
#define MAX77705_BAT_DTLS GENMASK(6, 4)
|
||||
#define MAX77705_BAT_DTLS_SHIFT 4
|
||||
|
||||
/* MAX77705_CHG_REG_DETAILS_02 */
|
||||
#define MAX77705_BYP_DTLS GENMASK(3, 0)
|
||||
#define MAX77705_BYP_DTLS_SHIFT 0
|
||||
|
||||
/* MAX77705_CHG_REG_CNFG_00 */
|
||||
#define MAX77705_CHG_SHIFT 0
|
||||
#define MAX77705_UNO_SHIFT 1
|
||||
#define MAX77705_OTG_SHIFT 1
|
||||
#define MAX77705_BUCK_SHIFT 2
|
||||
#define MAX77705_BOOST_SHIFT 3
|
||||
#define MAX77705_WDTEN_SHIFT 4
|
||||
#define MAX77705_CHG_MASK BIT(MAX77705_CHG_SHIFT)
|
||||
#define MAX77705_UNO_MASK BIT(MAX77705_UNO_SHIFT)
|
||||
#define MAX77705_OTG_MASK BIT(MAX77705_OTG_SHIFT)
|
||||
#define MAX77705_BUCK_MASK BIT(MAX77705_BUCK_SHIFT)
|
||||
#define MAX77705_BOOST_MASK BIT(MAX77705_BOOST_SHIFT)
|
||||
#define MAX77705_WDTEN_MASK BIT(MAX77705_WDTEN_SHIFT)
|
||||
#define MAX77705_UNO_CTRL (MAX77705_UNO_MASK | MAX77705_BOOST_MASK)
|
||||
#define MAX77705_OTG_CTRL (MAX77705_OTG_MASK | MAX77705_BOOST_MASK)
|
||||
|
||||
/* MAX77705_CHG_REG_CNFG_01 */
|
||||
#define MAX77705_FCHGTIME_DISABLE 0
|
||||
#define MAX77705_CHG_RSTRT_DISABLE 0x3
|
||||
|
||||
#define MAX77705_CHG_PQEN_DISABLE 0
|
||||
#define MAX77705_CHG_PQEN_ENABLE 1
|
||||
|
||||
/* MAX77705_CHG_REG_CNFG_02 */
|
||||
#define MAX77705_OTG_ILIM_500 0
|
||||
#define MAX77705_OTG_ILIM_900 1
|
||||
#define MAX77705_OTG_ILIM_1200 2
|
||||
#define MAX77705_OTG_ILIM_1500 3
|
||||
|
||||
/* MAX77705_CHG_REG_CNFG_03 */
|
||||
#define MAX77705_TO_ITH_150MA 0
|
||||
#define MAX77705_TO_TIME_30M 3
|
||||
#define MAX77705_SYS_TRACK_ENABLE 0
|
||||
#define MAX77705_SYS_TRACK_DISABLE 1
|
||||
|
||||
/* MAX77705_CHG_REG_CNFG_04 */
|
||||
#define MAX77705_CHG_MINVSYS_SHIFT 6
|
||||
#define MAX77705_CHG_MINVSYS_MASK GENMASK(7, 6)
|
||||
|
||||
/* MAX77705_CHG_REG_CNFG_05 */
|
||||
#define MAX77705_B2SOVRC_DISABLE 0
|
||||
#define MAX77705_B2SOVRC_4_5A 6
|
||||
#define MAX77705_B2SOVRC_4_8A 8
|
||||
#define MAX77705_B2SOVRC_5_0A 9
|
||||
|
||||
/* MAX77705_CHG_CNFG_06 */
|
||||
#define MAX77705_WDTCLR_SHIFT 0
|
||||
#define MAX77705_WDTCLR_MASK GENMASK(1, 0)
|
||||
#define MAX77705_WDTCLR 1
|
||||
#define MAX77705_CHGPROT_UNLOCKED 3
|
||||
#define MAX77705_SLOWEST_LX_SLOPE 3
|
||||
|
||||
/* MAX77705_CHG_REG_CNFG_07 */
|
||||
#define MAX77705_CHG_FMBST 4
|
||||
#define MAX77705_REG_FMBST_SHIFT 2
|
||||
#define MAX77705_REG_FMBST_MASK BIT(MAX77705_REG_FMBST_SHIFT)
|
||||
#define MAX77705_REG_FGSRC_SHIFT 1
|
||||
#define MAX77705_REG_FGSRC_MASK BIT(MAX77705_REG_FGSRC_SHIFT)
|
||||
|
||||
/* MAX77705_CHG_REG_CNFG_08 */
|
||||
#define MAX77705_CHG_FSW_3MHz 0
|
||||
#define MAX77705_CHG_FSW_2MHz 1
|
||||
#define MAX77705_CHG_FSW_1_5MHz 2
|
||||
|
||||
/* MAX77705_CHG_REG_CNFG_09 */
|
||||
#define MAX77705_CHG_DISABLE 0
|
||||
|
||||
/* MAX77705_CHG_REG_CNFG_12 */
|
||||
/* REG=4.5V, UVLO=4.7V */
|
||||
#define MAX77705_VCHGIN_4_5 0
|
||||
/* REG=4.5V, UVLO=4.7V */
|
||||
#define MAX77705_WCIN_4_5 0
|
||||
#define MAX77705_DISABLE_SKIP 1
|
||||
#define MAX77705_AUTO_SKIP 0
|
||||
|
||||
#define AICL_WORK_DELAY_MS 100
|
||||
|
||||
/* uA */
|
||||
#define MAX77705_CURRENT_CHGIN_STEP 25000
|
||||
#define MAX77705_CURRENT_CHG_STEP 50000
|
||||
#define MAX77705_CURRENT_CHGIN_MIN 100000
|
||||
#define MAX77705_CURRENT_CHGIN_MAX 3200000
|
||||
|
||||
enum max77705_field_idx {
|
||||
MAX77705_CHGPROT,
|
||||
MAX77705_CHG_EN,
|
||||
MAX77705_CHG_CC_LIM,
|
||||
MAX77705_CHG_CHGIN_LIM,
|
||||
MAX77705_CHG_CV_PRM,
|
||||
MAX77705_CHG_PQEN,
|
||||
MAX77705_CHG_RSTRT,
|
||||
MAX77705_CHG_WCIN,
|
||||
MAX77705_FCHGTIME,
|
||||
MAX77705_LX_SLOPE,
|
||||
MAX77705_MODE,
|
||||
MAX77705_OTG_ILIM,
|
||||
MAX77705_REG_B2SOVRC,
|
||||
MAX77705_REG_DISKIP,
|
||||
MAX77705_REG_FSW,
|
||||
MAX77705_SYS_TRACK,
|
||||
MAX77705_TO,
|
||||
MAX77705_TO_TIME,
|
||||
MAX77705_VBYPSET,
|
||||
MAX77705_VCHGIN,
|
||||
MAX77705_WCIN,
|
||||
MAX77705_N_REGMAP_FIELDS,
|
||||
};
|
||||
|
||||
static const struct reg_field max77705_reg_field[MAX77705_N_REGMAP_FIELDS] = {
|
||||
[MAX77705_MODE] = REG_FIELD(MAX77705_CHG_REG_CNFG_00, 0, 3),
|
||||
[MAX77705_FCHGTIME] = REG_FIELD(MAX77705_CHG_REG_CNFG_01, 0, 2),
|
||||
[MAX77705_CHG_RSTRT] = REG_FIELD(MAX77705_CHG_REG_CNFG_01, 4, 5),
|
||||
[MAX77705_CHG_PQEN] = REG_FIELD(MAX77705_CHG_REG_CNFG_01, 7, 7),
|
||||
[MAX77705_CHG_CC_LIM] = REG_FIELD(MAX77705_CHG_REG_CNFG_02, 0, 5),
|
||||
[MAX77705_OTG_ILIM] = REG_FIELD(MAX77705_CHG_REG_CNFG_02, 6, 7),
|
||||
[MAX77705_TO] = REG_FIELD(MAX77705_CHG_REG_CNFG_03, 0, 2),
|
||||
[MAX77705_TO_TIME] = REG_FIELD(MAX77705_CHG_REG_CNFG_03, 3, 5),
|
||||
[MAX77705_SYS_TRACK] = REG_FIELD(MAX77705_CHG_REG_CNFG_03, 7, 7),
|
||||
[MAX77705_CHG_CV_PRM] = REG_FIELD(MAX77705_CHG_REG_CNFG_04, 0, 5),
|
||||
[MAX77705_REG_B2SOVRC] = REG_FIELD(MAX77705_CHG_REG_CNFG_05, 0, 3),
|
||||
[MAX77705_CHGPROT] = REG_FIELD(MAX77705_CHG_REG_CNFG_06, 2, 3),
|
||||
[MAX77705_LX_SLOPE] = REG_FIELD(MAX77705_CHG_REG_CNFG_06, 5, 6),
|
||||
[MAX77705_REG_FSW] = REG_FIELD(MAX77705_CHG_REG_CNFG_08, 0, 1),
|
||||
[MAX77705_CHG_CHGIN_LIM] = REG_FIELD(MAX77705_CHG_REG_CNFG_09, 0, 6),
|
||||
[MAX77705_CHG_EN] = REG_FIELD(MAX77705_CHG_REG_CNFG_09, 7, 7),
|
||||
[MAX77705_CHG_WCIN] = REG_FIELD(MAX77705_CHG_REG_CNFG_10, 0, 5),
|
||||
[MAX77705_VBYPSET] = REG_FIELD(MAX77705_CHG_REG_CNFG_11, 0, 6),
|
||||
[MAX77705_REG_DISKIP] = REG_FIELD(MAX77705_CHG_REG_CNFG_12, 0, 0),
|
||||
[MAX77705_WCIN] = REG_FIELD(MAX77705_CHG_REG_CNFG_12, 1, 2),
|
||||
[MAX77705_VCHGIN] = REG_FIELD(MAX77705_CHG_REG_CNFG_12, 3, 4),
|
||||
};
|
||||
|
||||
struct max77705_charger_data {
|
||||
struct device *dev;
|
||||
struct regmap *regmap;
|
||||
struct regmap_field *rfield[MAX77705_N_REGMAP_FIELDS];
|
||||
struct power_supply_battery_info *bat_info;
|
||||
struct workqueue_struct *wqueue;
|
||||
struct work_struct chgin_work;
|
||||
struct power_supply *psy_chg;
|
||||
};
|
||||
|
||||
#endif /* __MAX77705_CHARGER_H */
|
||||
@@ -0,0 +1,19 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
/*
|
||||
* Author: Kamel Bouhra <kamel.bouhara@bootlin.com>
|
||||
*/
|
||||
|
||||
#ifndef POWER_ON_REASON_H
|
||||
#define POWER_ON_REASON_H
|
||||
|
||||
#define POWER_ON_REASON_REGULAR "regular power-up"
|
||||
#define POWER_ON_REASON_RTC "RTC wakeup"
|
||||
#define POWER_ON_REASON_WATCHDOG "watchdog timeout"
|
||||
#define POWER_ON_REASON_SOFTWARE "software reset"
|
||||
#define POWER_ON_REASON_RST_BTN "reset button action"
|
||||
#define POWER_ON_REASON_CPU_CLK_FAIL "CPU clock failure"
|
||||
#define POWER_ON_REASON_XTAL_FAIL "crystal oscillator failure"
|
||||
#define POWER_ON_REASON_BROWN_OUT "brown-out reset"
|
||||
#define POWER_ON_REASON_UNKNOWN "unknown reason"
|
||||
|
||||
#endif /* POWER_ON_REASON_H */
|
||||
@@ -0,0 +1,25 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/*
|
||||
* Gas Gauge driver for SBS Compliant Gas Gauges
|
||||
*
|
||||
* Copyright (c) 2010, NVIDIA Corporation.
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_POWER_SBS_BATTERY_H_
|
||||
#define __LINUX_POWER_SBS_BATTERY_H_
|
||||
|
||||
#include <linux/power_supply.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
/**
|
||||
* struct sbs_platform_data - platform data for sbs devices
|
||||
* @i2c_retry_count: # of times to retry on i2c IO failure
|
||||
* @poll_retry_count: # of times to retry looking for new status after
|
||||
* external change notification
|
||||
*/
|
||||
struct sbs_platform_data {
|
||||
u32 i2c_retry_count;
|
||||
u32 poll_retry_count;
|
||||
};
|
||||
|
||||
#endif
|
||||
@@ -0,0 +1,320 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0 */
|
||||
/*
|
||||
* OMAP Smartreflex Defines and Routines
|
||||
*
|
||||
* Author: Thara Gopinath <thara@ti.com>
|
||||
*
|
||||
* Copyright (C) 2010 Texas Instruments, Inc.
|
||||
* Thara Gopinath <thara@ti.com>
|
||||
*
|
||||
* Copyright (C) 2008 Nokia Corporation
|
||||
* Kalle Jokiniemi
|
||||
*
|
||||
* Copyright (C) 2007 Texas Instruments, Inc.
|
||||
* Lesly A M <x0080970@ti.com>
|
||||
*/
|
||||
|
||||
#ifndef __POWER_SMARTREFLEX_H
|
||||
#define __POWER_SMARTREFLEX_H
|
||||
|
||||
#include <linux/types.h>
|
||||
#include <linux/platform_device.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/platform_data/voltage-omap.h>
|
||||
|
||||
/*
|
||||
* Different Smartreflex IPs version. The v1 is the 65nm version used in
|
||||
* OMAP3430. The v2 is the update for the 45nm version of the IP
|
||||
* used in OMAP3630 and OMAP4430
|
||||
*/
|
||||
#define SR_TYPE_V1 1
|
||||
#define SR_TYPE_V2 2
|
||||
|
||||
/* SMART REFLEX REG ADDRESS OFFSET */
|
||||
#define SRCONFIG 0x00
|
||||
#define SRSTATUS 0x04
|
||||
#define SENVAL 0x08
|
||||
#define SENMIN 0x0C
|
||||
#define SENMAX 0x10
|
||||
#define SENAVG 0x14
|
||||
#define AVGWEIGHT 0x18
|
||||
#define NVALUERECIPROCAL 0x1c
|
||||
#define SENERROR_V1 0x20
|
||||
#define ERRCONFIG_V1 0x24
|
||||
#define IRQ_EOI 0x20
|
||||
#define IRQSTATUS_RAW 0x24
|
||||
#define IRQSTATUS 0x28
|
||||
#define IRQENABLE_SET 0x2C
|
||||
#define IRQENABLE_CLR 0x30
|
||||
#define SENERROR_V2 0x34
|
||||
#define ERRCONFIG_V2 0x38
|
||||
|
||||
/* Bit/Shift Positions */
|
||||
|
||||
/* SRCONFIG */
|
||||
#define SRCONFIG_ACCUMDATA_SHIFT 22
|
||||
#define SRCONFIG_SRCLKLENGTH_SHIFT 12
|
||||
#define SRCONFIG_SENNENABLE_V1_SHIFT 5
|
||||
#define SRCONFIG_SENPENABLE_V1_SHIFT 3
|
||||
#define SRCONFIG_SENNENABLE_V2_SHIFT 1
|
||||
#define SRCONFIG_SENPENABLE_V2_SHIFT 0
|
||||
#define SRCONFIG_CLKCTRL_SHIFT 0
|
||||
|
||||
#define SRCONFIG_ACCUMDATA_MASK (0x3ff << 22)
|
||||
|
||||
#define SRCONFIG_SRENABLE BIT(11)
|
||||
#define SRCONFIG_SENENABLE BIT(10)
|
||||
#define SRCONFIG_ERRGEN_EN BIT(9)
|
||||
#define SRCONFIG_MINMAXAVG_EN BIT(8)
|
||||
#define SRCONFIG_DELAYCTRL BIT(2)
|
||||
|
||||
/* AVGWEIGHT */
|
||||
#define AVGWEIGHT_SENPAVGWEIGHT_SHIFT 2
|
||||
#define AVGWEIGHT_SENNAVGWEIGHT_SHIFT 0
|
||||
|
||||
/* NVALUERECIPROCAL */
|
||||
#define NVALUERECIPROCAL_SENPGAIN_SHIFT 20
|
||||
#define NVALUERECIPROCAL_SENNGAIN_SHIFT 16
|
||||
#define NVALUERECIPROCAL_RNSENP_SHIFT 8
|
||||
#define NVALUERECIPROCAL_RNSENN_SHIFT 0
|
||||
|
||||
/* ERRCONFIG */
|
||||
#define ERRCONFIG_ERRWEIGHT_SHIFT 16
|
||||
#define ERRCONFIG_ERRMAXLIMIT_SHIFT 8
|
||||
#define ERRCONFIG_ERRMINLIMIT_SHIFT 0
|
||||
|
||||
#define SR_ERRWEIGHT_MASK (0x07 << 16)
|
||||
#define SR_ERRMAXLIMIT_MASK (0xff << 8)
|
||||
#define SR_ERRMINLIMIT_MASK (0xff << 0)
|
||||
|
||||
#define ERRCONFIG_VPBOUNDINTEN_V1 BIT(31)
|
||||
#define ERRCONFIG_VPBOUNDINTST_V1 BIT(30)
|
||||
#define ERRCONFIG_MCUACCUMINTEN BIT(29)
|
||||
#define ERRCONFIG_MCUACCUMINTST BIT(28)
|
||||
#define ERRCONFIG_MCUVALIDINTEN BIT(27)
|
||||
#define ERRCONFIG_MCUVALIDINTST BIT(26)
|
||||
#define ERRCONFIG_MCUBOUNDINTEN BIT(25)
|
||||
#define ERRCONFIG_MCUBOUNDINTST BIT(24)
|
||||
#define ERRCONFIG_MCUDISACKINTEN BIT(23)
|
||||
#define ERRCONFIG_VPBOUNDINTST_V2 BIT(23)
|
||||
#define ERRCONFIG_MCUDISACKINTST BIT(22)
|
||||
#define ERRCONFIG_VPBOUNDINTEN_V2 BIT(22)
|
||||
|
||||
#define ERRCONFIG_STATUS_V1_MASK (ERRCONFIG_VPBOUNDINTST_V1 | \
|
||||
ERRCONFIG_MCUACCUMINTST | \
|
||||
ERRCONFIG_MCUVALIDINTST | \
|
||||
ERRCONFIG_MCUBOUNDINTST | \
|
||||
ERRCONFIG_MCUDISACKINTST)
|
||||
/* IRQSTATUS */
|
||||
#define IRQSTATUS_MCUACCUMINT BIT(3)
|
||||
#define IRQSTATUS_MCVALIDINT BIT(2)
|
||||
#define IRQSTATUS_MCBOUNDSINT BIT(1)
|
||||
#define IRQSTATUS_MCUDISABLEACKINT BIT(0)
|
||||
|
||||
/* IRQENABLE_SET and IRQENABLE_CLEAR */
|
||||
#define IRQENABLE_MCUACCUMINT BIT(3)
|
||||
#define IRQENABLE_MCUVALIDINT BIT(2)
|
||||
#define IRQENABLE_MCUBOUNDSINT BIT(1)
|
||||
#define IRQENABLE_MCUDISABLEACKINT BIT(0)
|
||||
|
||||
/* Common Bit values */
|
||||
|
||||
#define SRCLKLENGTH_12MHZ_SYSCLK 0x3c
|
||||
#define SRCLKLENGTH_13MHZ_SYSCLK 0x41
|
||||
#define SRCLKLENGTH_19MHZ_SYSCLK 0x60
|
||||
#define SRCLKLENGTH_26MHZ_SYSCLK 0x82
|
||||
#define SRCLKLENGTH_38MHZ_SYSCLK 0xC0
|
||||
|
||||
/*
|
||||
* 3430 specific values. Maybe these should be passed from board file or
|
||||
* pmic structures.
|
||||
*/
|
||||
#define OMAP3430_SR_ACCUMDATA 0x1f4
|
||||
|
||||
#define OMAP3430_SR1_SENPAVGWEIGHT 0x03
|
||||
#define OMAP3430_SR1_SENNAVGWEIGHT 0x03
|
||||
|
||||
#define OMAP3430_SR2_SENPAVGWEIGHT 0x01
|
||||
#define OMAP3430_SR2_SENNAVGWEIGHT 0x01
|
||||
|
||||
#define OMAP3430_SR_ERRWEIGHT 0x04
|
||||
#define OMAP3430_SR_ERRMAXLIMIT 0x02
|
||||
|
||||
enum sr_instance {
|
||||
OMAP_SR_MPU, /* shared with iva on omap3 */
|
||||
OMAP_SR_CORE,
|
||||
OMAP_SR_IVA,
|
||||
OMAP_SR_NR,
|
||||
};
|
||||
|
||||
struct omap_sr {
|
||||
char *name;
|
||||
struct list_head node;
|
||||
struct platform_device *pdev;
|
||||
struct omap_sr_nvalue_table *nvalue_table;
|
||||
struct voltagedomain *voltdm;
|
||||
struct dentry *dbg_dir;
|
||||
unsigned int irq;
|
||||
struct clk *fck;
|
||||
int srid;
|
||||
int ip_type;
|
||||
int nvalue_count;
|
||||
bool autocomp_active;
|
||||
u32 clk_length;
|
||||
u32 err_weight;
|
||||
u32 err_minlimit;
|
||||
u32 err_maxlimit;
|
||||
u32 accum_data;
|
||||
u32 senn_avgweight;
|
||||
u32 senp_avgweight;
|
||||
u32 senp_mod;
|
||||
u32 senn_mod;
|
||||
void __iomem *base;
|
||||
unsigned long enabled:1;
|
||||
};
|
||||
|
||||
/**
|
||||
* test_cond_timeout - busy-loop, testing a condition
|
||||
* @cond: condition to test until it evaluates to true
|
||||
* @timeout: maximum number of microseconds in the timeout
|
||||
* @index: loop index (integer)
|
||||
*
|
||||
* Loop waiting for @cond to become true or until at least @timeout
|
||||
* microseconds have passed. To use, define some integer @index in the
|
||||
* calling code. After running, if @index == @timeout, then the loop has
|
||||
* timed out.
|
||||
*
|
||||
* Copied from omap_test_timeout */
|
||||
#define sr_test_cond_timeout(cond, timeout, index) \
|
||||
({ \
|
||||
for (index = 0; index < timeout; index++) { \
|
||||
if (cond) \
|
||||
break; \
|
||||
udelay(1); \
|
||||
} \
|
||||
})
|
||||
|
||||
/**
|
||||
* struct omap_sr_pmic_data - Strucutre to be populated by pmic code to pass
|
||||
* pmic specific info to smartreflex driver
|
||||
*
|
||||
* @sr_pmic_init: API to initialize smartreflex on the PMIC side.
|
||||
*/
|
||||
struct omap_sr_pmic_data {
|
||||
void (*sr_pmic_init) (void);
|
||||
};
|
||||
|
||||
/**
|
||||
* struct omap_smartreflex_dev_attr - Smartreflex Device attribute.
|
||||
*
|
||||
* @sensor_voltdm_name: Name of voltdomain of SR instance
|
||||
*/
|
||||
struct omap_smartreflex_dev_attr {
|
||||
const char *sensor_voltdm_name;
|
||||
};
|
||||
|
||||
/*
|
||||
* The smart reflex driver supports CLASS1 CLASS2 and CLASS3 SR.
|
||||
* The smartreflex class driver should pass the class type.
|
||||
* Should be used to populate the class_type field of the
|
||||
* omap_smartreflex_class_data structure.
|
||||
*/
|
||||
#define SR_CLASS1 0x1
|
||||
#define SR_CLASS2 0x2
|
||||
#define SR_CLASS3 0x3
|
||||
|
||||
/**
|
||||
* struct omap_sr_class_data - Smartreflex class driver info
|
||||
*
|
||||
* @enable: API to enable a particular class smaartreflex.
|
||||
* @disable: API to disable a particular class smartreflex.
|
||||
* @configure: API to configure a particular class smartreflex.
|
||||
* @notify: API to notify the class driver about an event in SR.
|
||||
* Not needed for class3.
|
||||
* @notify_flags: specify the events to be notified to the class driver
|
||||
* @class_type: specify which smartreflex class.
|
||||
* Can be used by the SR driver to take any class
|
||||
* based decisions.
|
||||
*/
|
||||
struct omap_sr_class_data {
|
||||
int (*enable)(struct omap_sr *sr);
|
||||
int (*disable)(struct omap_sr *sr, int is_volt_reset);
|
||||
int (*configure)(struct omap_sr *sr);
|
||||
int (*notify)(struct omap_sr *sr, u32 status);
|
||||
u8 notify_flags;
|
||||
u8 class_type;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct omap_sr_nvalue_table - Smartreflex n-target value info
|
||||
*
|
||||
* @efuse_offs: The offset of the efuse where n-target values are stored.
|
||||
* @nvalue: The n-target value.
|
||||
* @errminlimit: The value of the ERRMINLIMIT bitfield for this n-target
|
||||
* @volt_nominal: microvolts DC that the VDD is initially programmed to
|
||||
*/
|
||||
struct omap_sr_nvalue_table {
|
||||
u32 efuse_offs;
|
||||
u32 nvalue;
|
||||
u32 errminlimit;
|
||||
unsigned long volt_nominal;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct omap_sr_data - Smartreflex platform data.
|
||||
*
|
||||
* @name: instance name
|
||||
* @ip_type: Smartreflex IP type.
|
||||
* @senp_mod: SENPENABLE value of the sr CONFIG register
|
||||
* @senn_mod: SENNENABLE value for sr CONFIG register
|
||||
* @err_weight ERRWEIGHT value of the sr ERRCONFIG register
|
||||
* @err_maxlimit ERRMAXLIMIT value of the sr ERRCONFIG register
|
||||
* @accum_data ACCUMDATA value of the sr CONFIG register
|
||||
* @senn_avgweight SENNAVGWEIGHT value of the sr AVGWEIGHT register
|
||||
* @senp_avgweight SENPAVGWEIGHT value of the sr AVGWEIGHT register
|
||||
* @nvalue_count: Number of distinct nvalues in the nvalue table
|
||||
* @nvalue_table: table containing the efuse offsets and nvalues
|
||||
* corresponding to them.
|
||||
* @voltdm: Pointer to the voltage domain associated with the SR
|
||||
*/
|
||||
struct omap_sr_data {
|
||||
const char *name;
|
||||
int ip_type;
|
||||
u32 senp_mod;
|
||||
u32 senn_mod;
|
||||
u32 err_weight;
|
||||
u32 err_maxlimit;
|
||||
u32 accum_data;
|
||||
u32 senn_avgweight;
|
||||
u32 senp_avgweight;
|
||||
int nvalue_count;
|
||||
struct omap_sr_nvalue_table *nvalue_table;
|
||||
struct voltagedomain *voltdm;
|
||||
};
|
||||
|
||||
|
||||
extern struct omap_sr_data omap_sr_pdata[OMAP_SR_NR];
|
||||
|
||||
#ifdef CONFIG_POWER_AVS_OMAP
|
||||
|
||||
/* Smartreflex module enable/disable interface */
|
||||
void omap_sr_enable(struct voltagedomain *voltdm);
|
||||
void omap_sr_disable(struct voltagedomain *voltdm);
|
||||
void omap_sr_disable_reset_volt(struct voltagedomain *voltdm);
|
||||
|
||||
/* Smartreflex driver hooks to be called from Smartreflex class driver */
|
||||
int sr_enable(struct omap_sr *sr, unsigned long volt);
|
||||
void sr_disable(struct omap_sr *sr);
|
||||
int sr_configure_errgen(struct omap_sr *sr);
|
||||
int sr_disable_errgen(struct omap_sr *sr);
|
||||
int sr_configure_minmax(struct omap_sr *sr);
|
||||
|
||||
/* API to register the smartreflex class driver with the smartreflex driver */
|
||||
int sr_register_class(struct omap_sr_class_data *class_data);
|
||||
#else
|
||||
static inline void omap_sr_enable(struct voltagedomain *voltdm) {}
|
||||
static inline void omap_sr_disable(struct voltagedomain *voltdm) {}
|
||||
static inline void omap_sr_disable_reset_volt(
|
||||
struct voltagedomain *voltdm) {}
|
||||
#endif
|
||||
#endif
|
||||
@@ -0,0 +1,30 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
/*
|
||||
* Dumb driver for LiIon batteries using TWL4030 madc.
|
||||
*
|
||||
* Copyright 2013 Golden Delicious Computers
|
||||
* Nikolaus Schaller <hns@goldelico.com>
|
||||
*/
|
||||
|
||||
#ifndef __TWL4030_MADC_BATTERY_H
|
||||
#define __TWL4030_MADC_BATTERY_H
|
||||
|
||||
/*
|
||||
* Usually we can assume 100% @ 4.15V and 0% @ 3.3V but curves differ for
|
||||
* charging and discharging!
|
||||
*/
|
||||
|
||||
struct twl4030_madc_bat_calibration {
|
||||
short voltage; /* in mV - specify -1 for end of list */
|
||||
short level; /* in percent (0 .. 100%) */
|
||||
};
|
||||
|
||||
struct twl4030_madc_bat_platform_data {
|
||||
unsigned int capacity; /* total capacity in uAh */
|
||||
struct twl4030_madc_bat_calibration *charging;
|
||||
int charging_size;
|
||||
struct twl4030_madc_bat_calibration *discharging;
|
||||
int discharging_size;
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user