Lines Matching refs:adap

67 	struct cht_wc_i2c_adap *adap = data;  in cht_wc_i2c_adap_thread_handler()  local
70 mutex_lock(&adap->adap_lock); in cht_wc_i2c_adap_thread_handler()
73 ret = regmap_read(adap->regmap, CHT_WC_EXTCHGRIRQ, &reg); in cht_wc_i2c_adap_thread_handler()
75 dev_err(&adap->adapter.dev, "Error reading extchgrirq reg\n"); in cht_wc_i2c_adap_thread_handler()
76 mutex_unlock(&adap->adap_lock); in cht_wc_i2c_adap_thread_handler()
80 reg &= ~adap->irq_mask; in cht_wc_i2c_adap_thread_handler()
83 ret = regmap_read(adap->regmap, CHT_WC_I2C_RDDATA, &adap->read_data); in cht_wc_i2c_adap_thread_handler()
85 adap->io_error = true; in cht_wc_i2c_adap_thread_handler()
91 ret = regmap_write(adap->regmap, CHT_WC_EXTCHGRIRQ, reg); in cht_wc_i2c_adap_thread_handler()
93 dev_err(&adap->adapter.dev, "Error writing extchgrirq reg\n"); in cht_wc_i2c_adap_thread_handler()
96 adap->io_error |= !!(reg & CHT_WC_EXTCHGRIRQ_NACK_IRQ); in cht_wc_i2c_adap_thread_handler()
97 adap->done = true; in cht_wc_i2c_adap_thread_handler()
100 mutex_unlock(&adap->adap_lock); in cht_wc_i2c_adap_thread_handler()
103 wake_up(&adap->wait); in cht_wc_i2c_adap_thread_handler()
117 generic_handle_irq(adap->client_irq); in cht_wc_i2c_adap_thread_handler()
124 static u32 cht_wc_i2c_adap_master_func(struct i2c_adapter *adap) in cht_wc_i2c_adap_master_func() argument
135 struct cht_wc_i2c_adap *adap = i2c_get_adapdata(_adap); in cht_wc_i2c_adap_smbus_xfer() local
138 mutex_lock(&adap->adap_lock); in cht_wc_i2c_adap_smbus_xfer()
139 adap->io_error = false; in cht_wc_i2c_adap_smbus_xfer()
140 adap->done = false; in cht_wc_i2c_adap_smbus_xfer()
141 mutex_unlock(&adap->adap_lock); in cht_wc_i2c_adap_smbus_xfer()
143 ret = regmap_write(adap->regmap, CHT_WC_I2C_CLIENT_ADDR, addr); in cht_wc_i2c_adap_smbus_xfer()
148 ret = regmap_write(adap->regmap, CHT_WC_I2C_WRDATA, data->byte); in cht_wc_i2c_adap_smbus_xfer()
153 ret = regmap_write(adap->regmap, CHT_WC_I2C_REG_OFFSET, command); in cht_wc_i2c_adap_smbus_xfer()
157 ret = regmap_write(adap->regmap, CHT_WC_I2C_CTRL, in cht_wc_i2c_adap_smbus_xfer()
163 ret = wait_event_timeout(adap->wait, adap->done, msecs_to_jiffies(30)); in cht_wc_i2c_adap_smbus_xfer()
169 cht_wc_i2c_adap_thread_handler(0, adap); in cht_wc_i2c_adap_smbus_xfer()
170 if (!adap->done) in cht_wc_i2c_adap_smbus_xfer()
175 mutex_lock(&adap->adap_lock); in cht_wc_i2c_adap_smbus_xfer()
176 if (adap->io_error) in cht_wc_i2c_adap_smbus_xfer()
179 data->byte = adap->read_data; in cht_wc_i2c_adap_smbus_xfer()
180 mutex_unlock(&adap->adap_lock); in cht_wc_i2c_adap_smbus_xfer()
193 struct cht_wc_i2c_adap *adap = irq_data_get_irq_chip_data(data); in cht_wc_i2c_irq_lock() local
195 mutex_lock(&adap->irqchip_lock); in cht_wc_i2c_irq_lock()
200 struct cht_wc_i2c_adap *adap = irq_data_get_irq_chip_data(data); in cht_wc_i2c_irq_sync_unlock() local
203 if (adap->irq_mask != adap->old_irq_mask) { in cht_wc_i2c_irq_sync_unlock()
204 ret = regmap_write(adap->regmap, CHT_WC_EXTCHGRIRQ_MSK, in cht_wc_i2c_irq_sync_unlock()
205 adap->irq_mask); in cht_wc_i2c_irq_sync_unlock()
207 adap->old_irq_mask = adap->irq_mask; in cht_wc_i2c_irq_sync_unlock()
209 dev_err(&adap->adapter.dev, "Error writing EXTCHGRIRQ_MSK\n"); in cht_wc_i2c_irq_sync_unlock()
212 mutex_unlock(&adap->irqchip_lock); in cht_wc_i2c_irq_sync_unlock()
217 struct cht_wc_i2c_adap *adap = irq_data_get_irq_chip_data(data); in cht_wc_i2c_irq_enable() local
219 adap->irq_mask &= ~CHT_WC_EXTCHGRIRQ_CLIENT_IRQ; in cht_wc_i2c_irq_enable()
224 struct cht_wc_i2c_adap *adap = irq_data_get_irq_chip_data(data); in cht_wc_i2c_irq_disable() local
226 adap->irq_mask |= CHT_WC_EXTCHGRIRQ_CLIENT_IRQ; in cht_wc_i2c_irq_disable()
270 struct cht_wc_i2c_adap *adap; in cht_wc_i2c_adap_i2c_probe() local
286 adap = devm_kzalloc(&pdev->dev, sizeof(*adap), GFP_KERNEL); in cht_wc_i2c_adap_i2c_probe()
287 if (!adap) in cht_wc_i2c_adap_i2c_probe()
290 init_waitqueue_head(&adap->wait); in cht_wc_i2c_adap_i2c_probe()
291 mutex_init(&adap->adap_lock); in cht_wc_i2c_adap_i2c_probe()
292 mutex_init(&adap->irqchip_lock); in cht_wc_i2c_adap_i2c_probe()
293 adap->irqchip = cht_wc_i2c_irq_chip; in cht_wc_i2c_adap_i2c_probe()
294 adap->regmap = pmic->regmap; in cht_wc_i2c_adap_i2c_probe()
295 adap->adapter.owner = THIS_MODULE; in cht_wc_i2c_adap_i2c_probe()
296 adap->adapter.class = I2C_CLASS_HWMON; in cht_wc_i2c_adap_i2c_probe()
297 adap->adapter.algo = &cht_wc_i2c_adap_algo; in cht_wc_i2c_adap_i2c_probe()
298 strlcpy(adap->adapter.name, "PMIC I2C Adapter", in cht_wc_i2c_adap_i2c_probe()
299 sizeof(adap->adapter.name)); in cht_wc_i2c_adap_i2c_probe()
300 adap->adapter.dev.parent = &pdev->dev; in cht_wc_i2c_adap_i2c_probe()
303 adap->old_irq_mask = adap->irq_mask = ~CHT_WC_EXTCHGRIRQ_ADAP_IRQMASK; in cht_wc_i2c_adap_i2c_probe()
305 ret = regmap_read(adap->regmap, CHT_WC_I2C_RDDATA, &reg); in cht_wc_i2c_adap_i2c_probe()
309 ret = regmap_write(adap->regmap, CHT_WC_EXTCHGRIRQ, ~adap->irq_mask); in cht_wc_i2c_adap_i2c_probe()
313 ret = regmap_write(adap->regmap, CHT_WC_EXTCHGRIRQ_MSK, adap->irq_mask); in cht_wc_i2c_adap_i2c_probe()
318 adap->irq_domain = irq_domain_add_linear(pdev->dev.of_node, 1, in cht_wc_i2c_adap_i2c_probe()
320 if (!adap->irq_domain) in cht_wc_i2c_adap_i2c_probe()
323 adap->client_irq = irq_create_mapping(adap->irq_domain, 0); in cht_wc_i2c_adap_i2c_probe()
324 if (!adap->client_irq) { in cht_wc_i2c_adap_i2c_probe()
329 irq_set_chip_data(adap->client_irq, adap); in cht_wc_i2c_adap_i2c_probe()
330 irq_set_chip_and_handler(adap->client_irq, &adap->irqchip, in cht_wc_i2c_adap_i2c_probe()
335 IRQF_ONESHOT, "PMIC I2C Adapter", adap); in cht_wc_i2c_adap_i2c_probe()
339 i2c_set_adapdata(&adap->adapter, adap); in cht_wc_i2c_adap_i2c_probe()
340 ret = i2c_add_adapter(&adap->adapter); in cht_wc_i2c_adap_i2c_probe()
353 board_info.irq = adap->client_irq; in cht_wc_i2c_adap_i2c_probe()
354 adap->client = i2c_new_device(&adap->adapter, &board_info); in cht_wc_i2c_adap_i2c_probe()
355 if (!adap->client) { in cht_wc_i2c_adap_i2c_probe()
361 platform_set_drvdata(pdev, adap); in cht_wc_i2c_adap_i2c_probe()
365 i2c_del_adapter(&adap->adapter); in cht_wc_i2c_adap_i2c_probe()
367 irq_domain_remove(adap->irq_domain); in cht_wc_i2c_adap_i2c_probe()
373 struct cht_wc_i2c_adap *adap = platform_get_drvdata(pdev); in cht_wc_i2c_adap_i2c_remove() local
375 if (adap->client) in cht_wc_i2c_adap_i2c_remove()
376 i2c_unregister_device(adap->client); in cht_wc_i2c_adap_i2c_remove()
377 i2c_del_adapter(&adap->adapter); in cht_wc_i2c_adap_i2c_remove()
378 irq_domain_remove(adap->irq_domain); in cht_wc_i2c_adap_i2c_remove()