Author | Tokens | Token Proportion | Commits | Commit Proportion |
---|---|---|---|---|
Hans de Goede | 553 | 68.53% | 1 | 20.00% |
Daniel Scally | 254 | 31.47% | 4 | 80.00% |
Total | 807 | 5 |
// SPDX-License-Identifier: GPL-2.0 /* * TI TPS68470 PMIC platform data definition. * * Copyright (c) 2021 Dan Scally <djrscally@gmail.com> * Copyright (c) 2021 Red Hat Inc. * * Red Hat authors: * Hans de Goede <hdegoede@redhat.com> */ #include <linux/dmi.h> #include <linux/gpio/machine.h> #include <linux/platform_data/tps68470.h> #include <linux/regulator/machine.h> #include "tps68470.h" static struct regulator_consumer_supply int347a_core_consumer_supplies[] = { REGULATOR_SUPPLY("dvdd", "i2c-INT347A:00"), }; static struct regulator_consumer_supply int347a_ana_consumer_supplies[] = { REGULATOR_SUPPLY("avdd", "i2c-INT347A:00"), }; static struct regulator_consumer_supply int347a_vcm_consumer_supplies[] = { REGULATOR_SUPPLY("vdd", "i2c-INT347A:00-VCM"), }; static struct regulator_consumer_supply int347a_vsio_consumer_supplies[] = { REGULATOR_SUPPLY("dovdd", "i2c-INT347A:00"), REGULATOR_SUPPLY("vsio", "i2c-INT347A:00-VCM"), REGULATOR_SUPPLY("vddd", "i2c-INT347E:00"), }; static struct regulator_consumer_supply int347a_aux1_consumer_supplies[] = { REGULATOR_SUPPLY("vdda", "i2c-INT347E:00"), }; static struct regulator_consumer_supply int347a_aux2_consumer_supplies[] = { REGULATOR_SUPPLY("vdddo", "i2c-INT347E:00"), }; static const struct regulator_init_data surface_go_tps68470_core_reg_init_data = { .constraints = { .min_uV = 1200000, .max_uV = 1200000, .apply_uV = true, .valid_ops_mask = REGULATOR_CHANGE_STATUS, }, .num_consumer_supplies = ARRAY_SIZE(int347a_core_consumer_supplies), .consumer_supplies = int347a_core_consumer_supplies, }; static const struct regulator_init_data surface_go_tps68470_ana_reg_init_data = { .constraints = { .min_uV = 2815200, .max_uV = 2815200, .apply_uV = true, .valid_ops_mask = REGULATOR_CHANGE_STATUS, }, .num_consumer_supplies = ARRAY_SIZE(int347a_ana_consumer_supplies), .consumer_supplies = int347a_ana_consumer_supplies, }; static const struct regulator_init_data surface_go_tps68470_vcm_reg_init_data = { .constraints = { .min_uV = 2815200, .max_uV = 2815200, .apply_uV = true, .valid_ops_mask = REGULATOR_CHANGE_STATUS, }, .num_consumer_supplies = ARRAY_SIZE(int347a_vcm_consumer_supplies), .consumer_supplies = int347a_vcm_consumer_supplies, }; /* Ensure the always-on VIO regulator has the same voltage as VSIO */ static const struct regulator_init_data surface_go_tps68470_vio_reg_init_data = { .constraints = { .min_uV = 1800600, .max_uV = 1800600, .apply_uV = true, .always_on = true, }, }; static const struct regulator_init_data surface_go_tps68470_vsio_reg_init_data = { .constraints = { .min_uV = 1800600, .max_uV = 1800600, .apply_uV = true, .valid_ops_mask = REGULATOR_CHANGE_STATUS, }, .num_consumer_supplies = ARRAY_SIZE(int347a_vsio_consumer_supplies), .consumer_supplies = int347a_vsio_consumer_supplies, }; static const struct regulator_init_data surface_go_tps68470_aux1_reg_init_data = { .constraints = { .min_uV = 2815200, .max_uV = 2815200, .apply_uV = 1, .valid_ops_mask = REGULATOR_CHANGE_STATUS, }, .num_consumer_supplies = ARRAY_SIZE(int347a_aux1_consumer_supplies), .consumer_supplies = int347a_aux1_consumer_supplies, }; static const struct regulator_init_data surface_go_tps68470_aux2_reg_init_data = { .constraints = { .min_uV = 1800600, .max_uV = 1800600, .apply_uV = 1, .valid_ops_mask = REGULATOR_CHANGE_STATUS, }, .num_consumer_supplies = ARRAY_SIZE(int347a_aux2_consumer_supplies), .consumer_supplies = int347a_aux2_consumer_supplies, }; static const struct tps68470_regulator_platform_data surface_go_tps68470_pdata = { .reg_init_data = { [TPS68470_CORE] = &surface_go_tps68470_core_reg_init_data, [TPS68470_ANA] = &surface_go_tps68470_ana_reg_init_data, [TPS68470_VCM] = &surface_go_tps68470_vcm_reg_init_data, [TPS68470_VIO] = &surface_go_tps68470_vio_reg_init_data, [TPS68470_VSIO] = &surface_go_tps68470_vsio_reg_init_data, [TPS68470_AUX1] = &surface_go_tps68470_aux1_reg_init_data, [TPS68470_AUX2] = &surface_go_tps68470_aux2_reg_init_data, }, }; static struct gpiod_lookup_table surface_go_int347a_gpios = { .dev_id = "i2c-INT347A:00", .table = { GPIO_LOOKUP("tps68470-gpio", 9, "reset", GPIO_ACTIVE_LOW), GPIO_LOOKUP("tps68470-gpio", 7, "powerdown", GPIO_ACTIVE_LOW), { } } }; static struct gpiod_lookup_table surface_go_int347e_gpios = { .dev_id = "i2c-INT347E:00", .table = { GPIO_LOOKUP("tps68470-gpio", 5, "enable", GPIO_ACTIVE_HIGH), { } } }; static const struct int3472_tps68470_board_data surface_go_tps68470_board_data = { .dev_name = "i2c-INT3472:05", .tps68470_regulator_pdata = &surface_go_tps68470_pdata, .n_gpiod_lookups = 2, .tps68470_gpio_lookup_tables = { &surface_go_int347a_gpios, &surface_go_int347e_gpios, }, }; static const struct int3472_tps68470_board_data surface_go3_tps68470_board_data = { .dev_name = "i2c-INT3472:01", .tps68470_regulator_pdata = &surface_go_tps68470_pdata, .n_gpiod_lookups = 1, .tps68470_gpio_lookup_tables = { &surface_go_int347a_gpios }, }; static const struct dmi_system_id int3472_tps68470_board_data_table[] = { { .matches = { DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"), DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Surface Go"), }, .driver_data = (void *)&surface_go_tps68470_board_data, }, { .matches = { DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"), DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Surface Go 2"), }, .driver_data = (void *)&surface_go_tps68470_board_data, }, { .matches = { DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Microsoft Corporation"), DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "Surface Go 3"), }, .driver_data = (void *)&surface_go3_tps68470_board_data, }, { } }; const struct int3472_tps68470_board_data *int3472_tps68470_get_board_data(const char *dev_name) { const struct int3472_tps68470_board_data *board_data; const struct dmi_system_id *match; for (match = dmi_first_match(int3472_tps68470_board_data_table); match; match = dmi_first_match(match + 1)) { board_data = match->driver_data; if (strcmp(board_data->dev_name, dev_name) == 0) return board_data; } return NULL; }
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with Cregit http://github.com/cregit/cregit
Version 2.0-RC1