Lines Matching +full:have +full:- +full:pmic
1 // SPDX-License-Identifier: GPL-2.0
3 * MFD core driver for Intel Cherrytrail Whiskey Cove PMIC
7 * Based on various non upstream patches to support the CHT Whiskey Cove PMIC:
8 * Copyright (C) 2013-2015 Intel Corporation. All rights reserved.
22 /* PMIC device registers */
30 /* Whiskey Cove PMIC share same ACPI ID between different platforms */
76 int ret, orig_addr = client->addr; in cht_wc_byte_reg_read()
79 dev_err(&client->dev, "Error I2C address not specified\n"); in cht_wc_byte_reg_read()
80 return -EINVAL; in cht_wc_byte_reg_read()
83 client->addr = (reg & REG_ADDR_MASK) >> REG_ADDR_SHIFT; in cht_wc_byte_reg_read()
85 client->addr = orig_addr; in cht_wc_byte_reg_read()
98 int ret, orig_addr = client->addr; in cht_wc_byte_reg_write()
101 dev_err(&client->dev, "Error I2C address not specified\n"); in cht_wc_byte_reg_write()
102 return -EINVAL; in cht_wc_byte_reg_write()
105 client->addr = (reg & REG_ADDR_MASK) >> REG_ADDR_SHIFT; in cht_wc_byte_reg_write()
107 client->addr = orig_addr; in cht_wc_byte_reg_write()
144 * DMI decode dumps from linux-hardware.org only 116 have
167 DMI_EXACT_MATCH(DMI_PRODUCT_VERSION, "YETI-11"),
174 DMI_MATCH(DMI_PRODUCT_NAME, "Lenovo YB1-X91"),
177 /* Lenovo Yoga Tab 3 Pro YT3-X90F */
181 DMI_MATCH(DMI_PRODUCT_VERSION, "Blade3-10A-001"),
189 struct device *dev = &client->dev; in cht_wc_probe()
191 struct intel_soc_pmic *pmic; in cht_wc_probe() local
198 return dev_err_probe(dev, -ENODEV, "Failed to get PMIC hardware revision\n"); in cht_wc_probe()
200 return dev_err_probe(dev, -ENODEV, "Invalid PMIC hardware revision: %llu\n", hrv); in cht_wc_probe()
202 if (client->irq < 0) in cht_wc_probe()
203 return dev_err_probe(dev, -EINVAL, "Invalid IRQ\n"); in cht_wc_probe()
205 pmic = devm_kzalloc(dev, sizeof(*pmic), GFP_KERNEL); in cht_wc_probe()
206 if (!pmic) in cht_wc_probe()
207 return -ENOMEM; in cht_wc_probe()
211 pmic->cht_wc_model = (long)id->driver_data; in cht_wc_probe()
213 pmic->irq = client->irq; in cht_wc_probe()
214 pmic->dev = dev; in cht_wc_probe()
215 i2c_set_clientdata(client, pmic); in cht_wc_probe()
217 pmic->regmap = devm_regmap_init(dev, NULL, client, &cht_wc_regmap_cfg); in cht_wc_probe()
218 if (IS_ERR(pmic->regmap)) in cht_wc_probe()
219 return PTR_ERR(pmic->regmap); in cht_wc_probe()
221 ret = devm_regmap_add_irq_chip(dev, pmic->regmap, pmic->irq, in cht_wc_probe()
224 &pmic->irq_chip_data); in cht_wc_probe()
230 regmap_irq_get_domain(pmic->irq_chip_data)); in cht_wc_probe()
235 struct intel_soc_pmic *pmic = i2c_get_clientdata(client); in cht_wc_shutdown() local
237 disable_irq(pmic->irq); in cht_wc_shutdown()
242 struct intel_soc_pmic *pmic = dev_get_drvdata(dev); in cht_wc_suspend() local
244 disable_irq(pmic->irq); in cht_wc_suspend()
251 struct intel_soc_pmic *pmic = dev_get_drvdata(dev); in cht_wc_resume() local
253 enable_irq(pmic->irq); in cht_wc_resume()