162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Shared psy info for X86 tablets which ship with Android as the factory image
462306a36Sopenharmony_ci * and which have broken DSDT tables. The factory kernels shipped on these
562306a36Sopenharmony_ci * devices typically have a bunch of things hardcoded, rather than specified
662306a36Sopenharmony_ci * in their DSDT.
762306a36Sopenharmony_ci *
862306a36Sopenharmony_ci * Copyright (C) 2021-2023 Hans de Goede <hdegoede@redhat.com>
962306a36Sopenharmony_ci */
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci#include <linux/gpio/machine.h>
1262306a36Sopenharmony_ci#include <linux/platform_device.h>
1362306a36Sopenharmony_ci#include <linux/power/bq24190_charger.h>
1462306a36Sopenharmony_ci#include <linux/property.h>
1562306a36Sopenharmony_ci#include <linux/regulator/machine.h>
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ci#include "shared-psy-info.h"
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ci/* Generic / shared charger / battery settings */
2062306a36Sopenharmony_ciconst char * const tusb1211_chg_det_psy[] = { "tusb1211-charger-detect" };
2162306a36Sopenharmony_ciconst char * const bq24190_psy[] = { "bq24190-charger" };
2262306a36Sopenharmony_ciconst char * const bq25890_psy[] = { "bq25890-charger-0" };
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_cistatic const struct property_entry fg_bq24190_supply_props[] = {
2562306a36Sopenharmony_ci	PROPERTY_ENTRY_STRING_ARRAY("supplied-from", bq24190_psy),
2662306a36Sopenharmony_ci	{ }
2762306a36Sopenharmony_ci};
2862306a36Sopenharmony_ci
2962306a36Sopenharmony_ciconst struct software_node fg_bq24190_supply_node = {
3062306a36Sopenharmony_ci	.properties = fg_bq24190_supply_props,
3162306a36Sopenharmony_ci};
3262306a36Sopenharmony_ci
3362306a36Sopenharmony_cistatic const struct property_entry fg_bq25890_supply_props[] = {
3462306a36Sopenharmony_ci	PROPERTY_ENTRY_STRING_ARRAY("supplied-from", bq25890_psy),
3562306a36Sopenharmony_ci	{ }
3662306a36Sopenharmony_ci};
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ciconst struct software_node fg_bq25890_supply_node = {
3962306a36Sopenharmony_ci	.properties = fg_bq25890_supply_props,
4062306a36Sopenharmony_ci};
4162306a36Sopenharmony_ci
4262306a36Sopenharmony_ci/* LiPo HighVoltage (max 4.35V) settings used by most devs with a HV bat. */
4362306a36Sopenharmony_cistatic const struct property_entry generic_lipo_hv_4v35_battery_props[] = {
4462306a36Sopenharmony_ci	PROPERTY_ENTRY_STRING("compatible", "simple-battery"),
4562306a36Sopenharmony_ci	PROPERTY_ENTRY_STRING("device-chemistry", "lithium-ion"),
4662306a36Sopenharmony_ci	PROPERTY_ENTRY_U32("precharge-current-microamp", 256000),
4762306a36Sopenharmony_ci	PROPERTY_ENTRY_U32("charge-term-current-microamp", 128000),
4862306a36Sopenharmony_ci	PROPERTY_ENTRY_U32("constant-charge-current-max-microamp", 1856000),
4962306a36Sopenharmony_ci	PROPERTY_ENTRY_U32("constant-charge-voltage-max-microvolt", 4352000),
5062306a36Sopenharmony_ci	PROPERTY_ENTRY_U32("factory-internal-resistance-micro-ohms", 150000),
5162306a36Sopenharmony_ci	{ }
5262306a36Sopenharmony_ci};
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_ciconst struct software_node generic_lipo_hv_4v35_battery_node = {
5562306a36Sopenharmony_ci	.properties = generic_lipo_hv_4v35_battery_props,
5662306a36Sopenharmony_ci};
5762306a36Sopenharmony_ci
5862306a36Sopenharmony_ci/* For enabling the bq24190 5V boost based on id-pin */
5962306a36Sopenharmony_cistatic struct regulator_consumer_supply intel_int3496_consumer = {
6062306a36Sopenharmony_ci	.supply = "vbus",
6162306a36Sopenharmony_ci	.dev_name = "intel-int3496",
6262306a36Sopenharmony_ci};
6362306a36Sopenharmony_ci
6462306a36Sopenharmony_cistatic const struct regulator_init_data bq24190_vbus_init_data = {
6562306a36Sopenharmony_ci	.constraints = {
6662306a36Sopenharmony_ci		.name = "bq24190_vbus",
6762306a36Sopenharmony_ci		.valid_ops_mask = REGULATOR_CHANGE_STATUS,
6862306a36Sopenharmony_ci	},
6962306a36Sopenharmony_ci	.consumer_supplies = &intel_int3496_consumer,
7062306a36Sopenharmony_ci	.num_consumer_supplies = 1,
7162306a36Sopenharmony_ci};
7262306a36Sopenharmony_ci
7362306a36Sopenharmony_cistruct bq24190_platform_data bq24190_pdata = {
7462306a36Sopenharmony_ci	.regulator_init_data = &bq24190_vbus_init_data,
7562306a36Sopenharmony_ci};
7662306a36Sopenharmony_ci
7762306a36Sopenharmony_ciconst char * const bq24190_modules[] __initconst = {
7862306a36Sopenharmony_ci	"intel_crystal_cove_charger", /* For the bq24190 IRQ */
7962306a36Sopenharmony_ci	"bq24190_charger",            /* For the Vbus regulator for intel-int3496 */
8062306a36Sopenharmony_ci	NULL
8162306a36Sopenharmony_ci};
8262306a36Sopenharmony_ci
8362306a36Sopenharmony_ci/* Generic pdevs array and gpio-lookups for micro USB ID pin handling */
8462306a36Sopenharmony_ciconst struct platform_device_info int3496_pdevs[] __initconst = {
8562306a36Sopenharmony_ci	{
8662306a36Sopenharmony_ci		/* For micro USB ID pin handling */
8762306a36Sopenharmony_ci		.name = "intel-int3496",
8862306a36Sopenharmony_ci		.id = PLATFORM_DEVID_NONE,
8962306a36Sopenharmony_ci	},
9062306a36Sopenharmony_ci};
9162306a36Sopenharmony_ci
9262306a36Sopenharmony_cistruct gpiod_lookup_table int3496_reference_gpios = {
9362306a36Sopenharmony_ci	.dev_id = "intel-int3496",
9462306a36Sopenharmony_ci	.table = {
9562306a36Sopenharmony_ci		GPIO_LOOKUP("INT33FC:01", 15, "vbus", GPIO_ACTIVE_HIGH),
9662306a36Sopenharmony_ci		GPIO_LOOKUP("INT33FC:02", 1, "mux", GPIO_ACTIVE_HIGH),
9762306a36Sopenharmony_ci		GPIO_LOOKUP("INT33FC:02", 18, "id", GPIO_ACTIVE_HIGH),
9862306a36Sopenharmony_ci		{ }
9962306a36Sopenharmony_ci	},
10062306a36Sopenharmony_ci};
101