Lines Matching +full:pd +full:- +full:samsung
1 // SPDX-License-Identifier: GPL-2.0+
3 // max8998.c - mfd core driver for the Maxim 8998
5 // Copyright (C) 2009-2010 Samsung Electronics
6 // Kyungmin Park <kyungmin.park@samsung.com>
7 // Marek Szyprowski <m.szyprowski@samsung.com>
20 #include <linux/mfd/max8998-private.h>
26 .name = "max8998-pmic",
28 .name = "max8998-rtc",
30 .name = "max8998-battery",
36 .name = "lp3974-pmic",
38 .name = "lp3974-rtc",
47 mutex_lock(&max8998->iolock); in max8998_read_reg()
49 mutex_unlock(&max8998->iolock); in max8998_read_reg()
64 mutex_lock(&max8998->iolock); in max8998_bulk_read()
66 mutex_unlock(&max8998->iolock); in max8998_bulk_read()
79 mutex_lock(&max8998->iolock); in max8998_write_reg()
81 mutex_unlock(&max8998->iolock); in max8998_write_reg()
91 mutex_lock(&max8998->iolock); in max8998_bulk_write()
93 mutex_unlock(&max8998->iolock); in max8998_bulk_write()
106 mutex_lock(&max8998->iolock); in max8998_update_reg()
113 mutex_unlock(&max8998->iolock); in max8998_update_reg()
129 * device tree. Other sub-modules of max8998 such as pmic, rtc and others have
133 * the sub-modules need not instantiate another instance while parsing their
139 struct max8998_platform_data *pd; in max8998_i2c_parse_dt_pdata() local
141 pd = devm_kzalloc(dev, sizeof(*pd), GFP_KERNEL); in max8998_i2c_parse_dt_pdata()
142 if (!pd) in max8998_i2c_parse_dt_pdata()
143 return ERR_PTR(-ENOMEM); in max8998_i2c_parse_dt_pdata()
145 pd->ono = irq_of_parse_and_map(dev->of_node, 1); in max8998_i2c_parse_dt_pdata()
152 return pd; in max8998_i2c_parse_dt_pdata()
158 if (IS_ENABLED(CONFIG_OF) && i2c->dev.of_node) { in max8998_i2c_get_driver_data()
160 match = of_match_node(max8998_dt_match, i2c->dev.of_node); in max8998_i2c_get_driver_data()
161 return (unsigned long)match->data; in max8998_i2c_get_driver_data()
164 return id->driver_data; in max8998_i2c_get_driver_data()
170 struct max8998_platform_data *pdata = dev_get_platdata(&i2c->dev); in max8998_i2c_probe()
174 max8998 = devm_kzalloc(&i2c->dev, sizeof(struct max8998_dev), in max8998_i2c_probe()
177 return -ENOMEM; in max8998_i2c_probe()
179 if (IS_ENABLED(CONFIG_OF) && i2c->dev.of_node) { in max8998_i2c_probe()
180 pdata = max8998_i2c_parse_dt_pdata(&i2c->dev); in max8998_i2c_probe()
186 max8998->dev = &i2c->dev; in max8998_i2c_probe()
187 max8998->i2c = i2c; in max8998_i2c_probe()
188 max8998->irq = i2c->irq; in max8998_i2c_probe()
189 max8998->type = max8998_i2c_get_driver_data(i2c, id); in max8998_i2c_probe()
190 max8998->pdata = pdata; in max8998_i2c_probe()
192 max8998->ono = pdata->ono; in max8998_i2c_probe()
193 max8998->irq_base = pdata->irq_base; in max8998_i2c_probe()
194 max8998->wakeup = pdata->wakeup; in max8998_i2c_probe()
196 mutex_init(&max8998->iolock); in max8998_i2c_probe()
198 max8998->rtc = i2c_new_dummy_device(i2c->adapter, RTC_I2C_ADDR); in max8998_i2c_probe()
199 if (IS_ERR(max8998->rtc)) { in max8998_i2c_probe()
200 dev_err(&i2c->dev, "Failed to allocate I2C device for RTC\n"); in max8998_i2c_probe()
201 return PTR_ERR(max8998->rtc); in max8998_i2c_probe()
203 i2c_set_clientdata(max8998->rtc, max8998); in max8998_i2c_probe()
207 pm_runtime_set_active(max8998->dev); in max8998_i2c_probe()
209 switch (max8998->type) { in max8998_i2c_probe()
211 ret = mfd_add_devices(max8998->dev, -1, in max8998_i2c_probe()
216 ret = mfd_add_devices(max8998->dev, -1, in max8998_i2c_probe()
221 ret = -EINVAL; in max8998_i2c_probe()
227 device_init_wakeup(max8998->dev, max8998->wakeup); in max8998_i2c_probe()
232 mfd_remove_devices(max8998->dev); in max8998_i2c_probe()
234 i2c_unregister_device(max8998->rtc); in max8998_i2c_probe()
250 irq_set_irq_wake(max8998->irq, 1); in max8998_suspend()
260 irq_set_irq_wake(max8998->irq, 0); in max8998_resume()