Blame view
drivers/regulator/stw481x-vmmc.c
2.71 KB
af873fcec treewide: Replace... |
1 |
// SPDX-License-Identifier: GPL-2.0-only |
3615a34ea regulator: add ST... |
2 3 4 5 6 7 8 |
/* * Regulator driver for STw4810/STw4811 VMMC regulator. * * Copyright (C) 2013 ST-Ericsson SA * Written on behalf of Linaro for ST-Ericsson * * Author: Linus Walleij <linus.walleij@linaro.org> |
3615a34ea regulator: add ST... |
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
*/ #include <linux/err.h> #include <linux/init.h> #include <linux/mfd/stw481x.h> #include <linux/module.h> #include <linux/platform_device.h> #include <linux/regulator/driver.h> #include <linux/regulator/of_regulator.h> static const unsigned int stw481x_vmmc_voltages[] = { 1800000, 1800000, 2850000, 3000000, 1850000, 2600000, 2700000, 3300000, }; |
9032693e2 regulator: stw481... |
29 |
static const struct regulator_ops stw481x_vmmc_ops = { |
3615a34ea regulator: add ST... |
30 31 32 33 34 35 36 |
.list_voltage = regulator_list_voltage_table, .enable = regulator_enable_regmap, .disable = regulator_disable_regmap, .is_enabled = regulator_is_enabled_regmap, .get_voltage_sel = regulator_get_voltage_sel_regmap, .set_voltage_sel = regulator_set_voltage_sel_regmap, }; |
9032693e2 regulator: stw481... |
37 |
static const struct regulator_desc vmmc_regulator = { |
3615a34ea regulator: add ST... |
38 39 40 41 42 43 44 45 46 |
.name = "VMMC", .id = 0, .ops = &stw481x_vmmc_ops, .type = REGULATOR_VOLTAGE, .owner = THIS_MODULE, .n_voltages = ARRAY_SIZE(stw481x_vmmc_voltages), .volt_table = stw481x_vmmc_voltages, .enable_time = 200, /* FIXME: look this up */ .enable_reg = STW_CONF1, |
295070e9a regulator: stw481... |
47 48 |
.enable_mask = STW_CONF1_PDN_VMMC | STW_CONF1_MMC_LS_STATUS, .enable_val = STW_CONF1_PDN_VMMC, |
3615a34ea regulator: add ST... |
49 50 51 52 53 54 55 56 |
.vsel_reg = STW_CONF1, .vsel_mask = STW_CONF1_VMMC_MASK, }; static int stw481x_vmmc_regulator_probe(struct platform_device *pdev) { struct stw481x *stw481x = dev_get_platdata(&pdev->dev); struct regulator_config config = { }; |
14aef2919 regulator: stw481... |
57 |
struct regulator_dev *rdev; |
3615a34ea regulator: add ST... |
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
int ret; /* First disable the external VMMC if it's active */ ret = regmap_update_bits(stw481x->map, STW_CONF2, STW_CONF2_VMMC_EXT, 0); if (ret) { dev_err(&pdev->dev, "could not disable external VMMC "); return ret; } /* Register VMMC regulator */ config.dev = &pdev->dev; config.driver_data = stw481x; config.regmap = stw481x->map; config.of_node = pdev->dev.of_node; config.init_data = of_get_regulator_init_data(&pdev->dev, |
072e78b12 regulator: of: Ad... |
75 76 |
pdev->dev.of_node, &vmmc_regulator); |
3615a34ea regulator: add ST... |
77 |
|
14aef2919 regulator: stw481... |
78 79 |
rdev = devm_regulator_register(&pdev->dev, &vmmc_regulator, &config); if (IS_ERR(rdev)) { |
3615a34ea regulator: add ST... |
80 81 82 |
dev_err(&pdev->dev, "error initializing STw481x VMMC regulator "); |
14aef2919 regulator: stw481... |
83 |
return PTR_ERR(rdev); |
3615a34ea regulator: add ST... |
84 85 86 87 88 89 |
} dev_info(&pdev->dev, "initialized STw481x VMMC regulator "); return 0; } |
3615a34ea regulator: add ST... |
90 91 92 93 94 95 96 97 |
static const struct of_device_id stw481x_vmmc_match[] = { { .compatible = "st,stw481x-vmmc", }, {}, }; static struct platform_driver stw481x_vmmc_regulator_driver = { .driver = { .name = "stw481x-vmmc-regulator", |
18dca93eb regulator: stw481... |
98 |
.of_match_table = stw481x_vmmc_match, |
3615a34ea regulator: add ST... |
99 100 |
}, .probe = stw481x_vmmc_regulator_probe, |
3615a34ea regulator: add ST... |
101 102 103 |
}; module_platform_driver(stw481x_vmmc_regulator_driver); |