File Index
Files and directories
Sign in
FILE

shared-psy-info.c

File preview with syntax highlighting.

linux-6.19.14/drivers/platform/x86/x86-android-tablets/shared-psy-info.c C
  1// SPDX-License-Identifier: GPL-2.0-or-later
  2/*
  3 * Shared psy info for X86 tablets which ship with Android as the factory image
  4 * and which have broken DSDT tables. The factory kernels shipped on these
  5 * devices typically have a bunch of things hardcoded, rather than specified
  6 * in their DSDT.
  7 *
  8 * Copyright (C) 2021-2023 Hans de Goede <hansg@kernel.org>
  9 */
 10
 11#include <linux/gpio/machine.h>
 12#include <linux/gpio/property.h>
 13#include <linux/platform_device.h>
 14#include <linux/power/bq24190_charger.h>
 15#include <linux/property.h>
 16#include <linux/regulator/machine.h>
 17
 18#include "shared-psy-info.h"
 19#include "x86-android-tablets.h"
 20
 21/* Generic / shared charger / battery settings */
 22const char * const tusb1211_chg_det_psy[] = { "tusb1211-charger-detect" };
 23const char * const bq24190_psy[] = { "bq24190-charger" };
 24const char * const bq25890_psy[] = { "bq25890-charger-0" };
 25
 26static const struct property_entry fg_bq24190_supply_props[] = {
 27	PROPERTY_ENTRY_STRING_ARRAY("supplied-from", bq24190_psy),
 28	{ }
 29};
 30
 31const struct software_node fg_bq24190_supply_node = {
 32	.properties = fg_bq24190_supply_props,
 33};
 34
 35static const struct property_entry fg_bq25890_supply_props[] = {
 36	PROPERTY_ENTRY_STRING_ARRAY("supplied-from", bq25890_psy),
 37	{ }
 38};
 39
 40const struct software_node fg_bq25890_supply_node = {
 41	.properties = fg_bq25890_supply_props,
 42};
 43
 44static const u32 generic_lipo_battery_ovc_cap_celcius[] = { 25 };
 45
 46static const u32 generic_lipo_4v2_battery_ovc_cap_table0[] = {
 47	4200000, 100,
 48	4150000, 95,
 49	4110000, 90,
 50	4075000, 85,
 51	4020000, 80,
 52	3982500, 75,
 53	3945000, 70,
 54	3907500, 65,
 55	3870000, 60,
 56	3853333, 55,
 57	3836667, 50,
 58	3820000, 45,
 59	3803333, 40,
 60	3786667, 35,
 61	3770000, 30,
 62	3750000, 25,
 63	3730000, 20,
 64	3710000, 15,
 65	3690000, 10,
 66	3610000, 5,
 67	3350000, 0
 68};
 69
 70static const u32 generic_lipo_hv_4v35_battery_ovc_cap_table0[] = {
 71	4300000, 100,
 72	4250000, 96,
 73	4200000, 91,
 74	4150000, 86,
 75	4110000, 82,
 76	4075000, 77,
 77	4020000, 73,
 78	3982500, 68,
 79	3945000, 64,
 80	3907500, 59,
 81	3870000, 55,
 82	3853333, 50,
 83	3836667, 45,
 84	3820000, 41,
 85	3803333, 36,
 86	3786667, 32,
 87	3770000, 27,
 88	3750000, 23,
 89	3730000, 18,
 90	3710000, 14,
 91	3690000, 9,
 92	3610000, 5,
 93	3350000, 0
 94};
 95
 96/* Standard LiPo (max 4.2V) settings used by most devs with a LiPo battery */
 97static const struct property_entry generic_lipo_4v2_battery_props[] = {
 98	PROPERTY_ENTRY_STRING("compatible", "simple-battery"),
 99	PROPERTY_ENTRY_STRING("device-chemistry", "lithium-ion-polymer"),
100	PROPERTY_ENTRY_U32("precharge-current-microamp", 256000),
101	PROPERTY_ENTRY_U32("charge-term-current-microamp", 128000),
102	PROPERTY_ENTRY_U32("constant-charge-current-max-microamp", 2048000),
103	PROPERTY_ENTRY_U32("constant-charge-voltage-max-microvolt", 4208000),
104	PROPERTY_ENTRY_U32("factory-internal-resistance-micro-ohms", 150000),
105	PROPERTY_ENTRY_U32_ARRAY("ocv-capacity-celsius",
106				 generic_lipo_battery_ovc_cap_celcius),
107	PROPERTY_ENTRY_U32_ARRAY("ocv-capacity-table-0",
108				 generic_lipo_4v2_battery_ovc_cap_table0),
109	{ }
110};
111
112const struct software_node generic_lipo_4v2_battery_node = {
113	.properties = generic_lipo_4v2_battery_props,
114};
115
116const struct software_node *generic_lipo_4v2_battery_swnodes[] = {
117	&generic_lipo_4v2_battery_node,
118	NULL
119};
120
121/* LiPo HighVoltage (max 4.35V) settings used by most devs with a HV battery */
122static const struct property_entry generic_lipo_hv_4v35_battery_props[] = {
123	PROPERTY_ENTRY_STRING("compatible", "simple-battery"),
124	PROPERTY_ENTRY_STRING("device-chemistry", "lithium-ion"),
125	PROPERTY_ENTRY_U32("precharge-current-microamp", 256000),
126	PROPERTY_ENTRY_U32("charge-term-current-microamp", 128000),
127	PROPERTY_ENTRY_U32("constant-charge-current-max-microamp", 1856000),
128	PROPERTY_ENTRY_U32("constant-charge-voltage-max-microvolt", 4352000),
129	PROPERTY_ENTRY_U32("factory-internal-resistance-micro-ohms", 150000),
130	PROPERTY_ENTRY_U32_ARRAY("ocv-capacity-celsius",
131				 generic_lipo_battery_ovc_cap_celcius),
132	PROPERTY_ENTRY_U32_ARRAY("ocv-capacity-table-0",
133				 generic_lipo_hv_4v35_battery_ovc_cap_table0),
134	{ }
135};
136
137const struct software_node generic_lipo_hv_4v35_battery_node = {
138	.properties = generic_lipo_hv_4v35_battery_props,
139};
140
141const struct software_node *generic_lipo_hv_4v35_battery_swnodes[] = {
142	&generic_lipo_hv_4v35_battery_node,
143	NULL
144};
145
146/* For enabling the bq24190 5V boost based on id-pin */
147static struct regulator_consumer_supply intel_int3496_consumer = {
148	.supply = "vbus",
149	.dev_name = "intel-int3496",
150};
151
152static const struct regulator_init_data bq24190_vbus_init_data = {
153	.constraints = {
154		.name = "bq24190_vbus",
155		.valid_ops_mask = REGULATOR_CHANGE_STATUS,
156	},
157	.consumer_supplies = &intel_int3496_consumer,
158	.num_consumer_supplies = 1,
159};
160
161struct bq24190_platform_data bq24190_pdata = {
162	.regulator_init_data = &bq24190_vbus_init_data,
163};
164
165const char * const bq24190_modules[] __initconst = {
166	"intel_crystal_cove_charger", /* For the bq24190 IRQ */
167	"bq24190_charger",            /* For the Vbus regulator for intel-int3496 */
168	NULL
169};
170
171static const struct property_entry int3496_reference_props[] __initconst = {
172	PROPERTY_ENTRY_GPIO("vbus-gpios", &baytrail_gpiochip_nodes[1], 15, GPIO_ACTIVE_HIGH),
173	PROPERTY_ENTRY_GPIO("mux-gpios", &baytrail_gpiochip_nodes[2], 1, GPIO_ACTIVE_HIGH),
174	PROPERTY_ENTRY_GPIO("id-gpios", &baytrail_gpiochip_nodes[2], 18, GPIO_ACTIVE_HIGH),
175	{ }
176};
177
178/* Generic pdevs array and gpio-lookups for micro USB ID pin handling */
179const struct platform_device_info int3496_pdevs[] __initconst = {
180	{
181		/* For micro USB ID pin handling */
182		.name = "intel-int3496",
183		.id = PLATFORM_DEVID_NONE,
184		.properties = int3496_reference_props,
185	},
186};
~/ Read-only file preview.