Lines Matching refs:chip

192 static inline bool offset_is_oscio(struct sx150x_chip *chip, unsigned offset)  in offset_is_oscio()  argument
194 return (chip->dev_cfg->ngpios == offset); in offset_is_oscio()
225 static s32 sx150x_write_cfg(struct sx150x_chip *chip, in sx150x_write_cfg() argument
234 err = sx150x_i2c_read(chip->client, reg, &data); in sx150x_write_cfg()
240 return sx150x_i2c_write(chip->client, reg, data); in sx150x_write_cfg()
243 static int sx150x_get_io(struct sx150x_chip *chip, unsigned offset) in sx150x_get_io() argument
245 u8 reg = chip->dev_cfg->reg_data; in sx150x_get_io()
252 err = sx150x_i2c_read(chip->client, reg, &data); in sx150x_get_io()
259 static void sx150x_set_oscio(struct sx150x_chip *chip, int val) in sx150x_set_oscio() argument
261 sx150x_i2c_write(chip->client, in sx150x_set_oscio()
262 chip->dev_cfg->pri.x789.reg_clock, in sx150x_set_oscio()
266 static void sx150x_set_io(struct sx150x_chip *chip, unsigned offset, int val) in sx150x_set_io() argument
268 sx150x_write_cfg(chip, in sx150x_set_io()
271 chip->dev_cfg->reg_data, in sx150x_set_io()
275 static int sx150x_io_input(struct sx150x_chip *chip, unsigned offset) in sx150x_io_input() argument
277 return sx150x_write_cfg(chip, in sx150x_io_input()
280 chip->dev_cfg->reg_dir, in sx150x_io_input()
284 static int sx150x_io_output(struct sx150x_chip *chip, unsigned offset, int val) in sx150x_io_output() argument
288 err = sx150x_write_cfg(chip, in sx150x_io_output()
291 chip->dev_cfg->reg_data, in sx150x_io_output()
294 err = sx150x_write_cfg(chip, in sx150x_io_output()
297 chip->dev_cfg->reg_dir, in sx150x_io_output()
304 struct sx150x_chip *chip = to_sx150x(gc); in sx150x_gpio_get() local
307 if (!offset_is_oscio(chip, offset)) { in sx150x_gpio_get()
308 mutex_lock(&chip->lock); in sx150x_gpio_get()
309 status = sx150x_get_io(chip, offset); in sx150x_gpio_get()
310 mutex_unlock(&chip->lock); in sx150x_gpio_get()
318 struct sx150x_chip *chip = to_sx150x(gc); in sx150x_gpio_set() local
320 mutex_lock(&chip->lock); in sx150x_gpio_set()
321 if (offset_is_oscio(chip, offset)) in sx150x_gpio_set()
322 sx150x_set_oscio(chip, val); in sx150x_gpio_set()
324 sx150x_set_io(chip, offset, val); in sx150x_gpio_set()
325 mutex_unlock(&chip->lock); in sx150x_gpio_set()
330 struct sx150x_chip *chip = to_sx150x(gc); in sx150x_gpio_direction_input() local
333 if (!offset_is_oscio(chip, offset)) { in sx150x_gpio_direction_input()
334 mutex_lock(&chip->lock); in sx150x_gpio_direction_input()
335 status = sx150x_io_input(chip, offset); in sx150x_gpio_direction_input()
336 mutex_unlock(&chip->lock); in sx150x_gpio_direction_input()
345 struct sx150x_chip *chip = to_sx150x(gc); in sx150x_gpio_direction_output() local
348 if (!offset_is_oscio(chip, offset)) { in sx150x_gpio_direction_output()
349 mutex_lock(&chip->lock); in sx150x_gpio_direction_output()
350 status = sx150x_io_output(chip, offset, val); in sx150x_gpio_direction_output()
351 mutex_unlock(&chip->lock); in sx150x_gpio_direction_output()
358 struct sx150x_chip *chip = to_sx150x(irq_data_get_irq_chip_data(d)); in sx150x_irq_mask() local
361 chip->irq_masked |= (1 << n); in sx150x_irq_mask()
362 chip->irq_update = n; in sx150x_irq_mask()
367 struct sx150x_chip *chip = to_sx150x(irq_data_get_irq_chip_data(d)); in sx150x_irq_unmask() local
370 chip->irq_masked &= ~(1 << n); in sx150x_irq_unmask()
371 chip->irq_update = n; in sx150x_irq_unmask()
376 struct sx150x_chip *chip = to_sx150x(irq_data_get_irq_chip_data(d)); in sx150x_irq_set_type() local
389 chip->irq_sense &= ~(3UL << (n * 2)); in sx150x_irq_set_type()
390 chip->irq_sense |= val << (n * 2); in sx150x_irq_set_type()
391 chip->irq_update = n; in sx150x_irq_set_type()
397 struct sx150x_chip *chip = (struct sx150x_chip *)dev_id; in sx150x_irq_thread_fn() local
405 for (i = (chip->dev_cfg->ngpios / 8) - 1; i >= 0; --i) { in sx150x_irq_thread_fn()
406 err = sx150x_i2c_read(chip->client, in sx150x_irq_thread_fn()
407 chip->dev_cfg->reg_irq_src - i, in sx150x_irq_thread_fn()
412 sx150x_i2c_write(chip->client, in sx150x_irq_thread_fn()
413 chip->dev_cfg->reg_irq_src - i, in sx150x_irq_thread_fn()
418 chip->gpio_chip.irqdomain, in sx150x_irq_thread_fn()
431 struct sx150x_chip *chip = to_sx150x(irq_data_get_irq_chip_data(d)); in sx150x_irq_bus_lock() local
433 mutex_lock(&chip->lock); in sx150x_irq_bus_lock()
438 struct sx150x_chip *chip = to_sx150x(irq_data_get_irq_chip_data(d)); in sx150x_irq_bus_sync_unlock() local
441 if (chip->irq_update == NO_UPDATE_PENDING) in sx150x_irq_bus_sync_unlock()
444 n = chip->irq_update; in sx150x_irq_bus_sync_unlock()
445 chip->irq_update = NO_UPDATE_PENDING; in sx150x_irq_bus_sync_unlock()
448 if (chip->dev_sense == chip->irq_sense && in sx150x_irq_bus_sync_unlock()
449 chip->dev_masked == chip->irq_masked) in sx150x_irq_bus_sync_unlock()
452 chip->dev_sense = chip->irq_sense; in sx150x_irq_bus_sync_unlock()
453 chip->dev_masked = chip->irq_masked; in sx150x_irq_bus_sync_unlock()
455 if (chip->irq_masked & (1 << n)) { in sx150x_irq_bus_sync_unlock()
456 sx150x_write_cfg(chip, n, 1, chip->dev_cfg->reg_irq_mask, 1); in sx150x_irq_bus_sync_unlock()
457 sx150x_write_cfg(chip, n, 2, chip->dev_cfg->reg_sense, 0); in sx150x_irq_bus_sync_unlock()
459 sx150x_write_cfg(chip, n, 1, chip->dev_cfg->reg_irq_mask, 0); in sx150x_irq_bus_sync_unlock()
460 sx150x_write_cfg(chip, n, 2, chip->dev_cfg->reg_sense, in sx150x_irq_bus_sync_unlock()
461 chip->irq_sense >> (n * 2)); in sx150x_irq_bus_sync_unlock()
464 mutex_unlock(&chip->lock); in sx150x_irq_bus_sync_unlock()
467 static void sx150x_init_chip(struct sx150x_chip *chip, in sx150x_init_chip() argument
472 mutex_init(&chip->lock); in sx150x_init_chip()
474 chip->client = client; in sx150x_init_chip()
475 chip->dev_cfg = &sx150x_devices[driver_data]; in sx150x_init_chip()
476 chip->gpio_chip.dev = &client->dev; in sx150x_init_chip()
477 chip->gpio_chip.label = client->name; in sx150x_init_chip()
478 chip->gpio_chip.direction_input = sx150x_gpio_direction_input; in sx150x_init_chip()
479 chip->gpio_chip.direction_output = sx150x_gpio_direction_output; in sx150x_init_chip()
480 chip->gpio_chip.get = sx150x_gpio_get; in sx150x_init_chip()
481 chip->gpio_chip.set = sx150x_gpio_set; in sx150x_init_chip()
482 chip->gpio_chip.base = pdata->gpio_base; in sx150x_init_chip()
483 chip->gpio_chip.can_sleep = true; in sx150x_init_chip()
484 chip->gpio_chip.ngpio = chip->dev_cfg->ngpios; in sx150x_init_chip()
486 chip->gpio_chip.of_node = client->dev.of_node; in sx150x_init_chip()
487 chip->gpio_chip.of_gpio_n_cells = 2; in sx150x_init_chip()
490 ++chip->gpio_chip.ngpio; in sx150x_init_chip()
492 chip->irq_chip.name = client->name; in sx150x_init_chip()
493 chip->irq_chip.irq_mask = sx150x_irq_mask; in sx150x_init_chip()
494 chip->irq_chip.irq_unmask = sx150x_irq_unmask; in sx150x_init_chip()
495 chip->irq_chip.irq_set_type = sx150x_irq_set_type; in sx150x_init_chip()
496 chip->irq_chip.irq_bus_lock = sx150x_irq_bus_lock; in sx150x_init_chip()
497 chip->irq_chip.irq_bus_sync_unlock = sx150x_irq_bus_sync_unlock; in sx150x_init_chip()
498 chip->irq_summary = -1; in sx150x_init_chip()
499 chip->irq_base = -1; in sx150x_init_chip()
500 chip->irq_masked = ~0; in sx150x_init_chip()
501 chip->irq_sense = 0; in sx150x_init_chip()
502 chip->dev_masked = ~0; in sx150x_init_chip()
503 chip->dev_sense = 0; in sx150x_init_chip()
504 chip->irq_update = NO_UPDATE_PENDING; in sx150x_init_chip()
507 static int sx150x_init_io(struct sx150x_chip *chip, u8 base, u16 cfg) in sx150x_init_io() argument
512 for (n = 0; err >= 0 && n < (chip->dev_cfg->ngpios / 8); ++n) in sx150x_init_io()
513 err = sx150x_i2c_write(chip->client, base - n, cfg >> (n * 8)); in sx150x_init_io()
517 static int sx150x_reset(struct sx150x_chip *chip) in sx150x_reset() argument
521 err = i2c_smbus_write_byte_data(chip->client, in sx150x_reset()
522 chip->dev_cfg->pri.x789.reg_reset, in sx150x_reset()
527 err = i2c_smbus_write_byte_data(chip->client, in sx150x_reset()
528 chip->dev_cfg->pri.x789.reg_reset, in sx150x_reset()
533 static int sx150x_init_hw(struct sx150x_chip *chip, in sx150x_init_hw() argument
539 err = sx150x_reset(chip); in sx150x_init_hw()
544 if (chip->dev_cfg->model == SX150X_789) in sx150x_init_hw()
545 err = sx150x_i2c_write(chip->client, in sx150x_init_hw()
546 chip->dev_cfg->pri.x789.reg_misc, in sx150x_init_hw()
549 err = sx150x_i2c_write(chip->client, in sx150x_init_hw()
550 chip->dev_cfg->pri.x456.reg_advance, in sx150x_init_hw()
555 err = sx150x_init_io(chip, chip->dev_cfg->reg_pullup, in sx150x_init_hw()
560 err = sx150x_init_io(chip, chip->dev_cfg->reg_pulldn, in sx150x_init_hw()
565 if (chip->dev_cfg->model == SX150X_789) { in sx150x_init_hw()
566 err = sx150x_init_io(chip, in sx150x_init_hw()
567 chip->dev_cfg->pri.x789.reg_drain, in sx150x_init_hw()
572 err = sx150x_init_io(chip, in sx150x_init_hw()
573 chip->dev_cfg->pri.x789.reg_polarity, in sx150x_init_hw()
579 err = sx150x_init_io(chip, in sx150x_init_hw()
580 chip->dev_cfg->pri.x456.reg_pld_mode, in sx150x_init_hw()
588 sx150x_set_oscio(chip, 0); in sx150x_init_hw()
593 static int sx150x_install_irq_chip(struct sx150x_chip *chip, in sx150x_install_irq_chip() argument
599 chip->irq_summary = irq_summary; in sx150x_install_irq_chip()
600 chip->irq_base = irq_base; in sx150x_install_irq_chip()
603 err = gpiochip_irqchip_add(&chip->gpio_chip, in sx150x_install_irq_chip()
604 &chip->irq_chip, chip->irq_base, in sx150x_install_irq_chip()
607 dev_err(&chip->client->dev, in sx150x_install_irq_chip()
612 err = devm_request_threaded_irq(&chip->client->dev, in sx150x_install_irq_chip()
615 chip->irq_chip.name, chip); in sx150x_install_irq_chip()
617 chip->irq_summary = -1; in sx150x_install_irq_chip()
618 chip->irq_base = -1; in sx150x_install_irq_chip()
630 struct sx150x_chip *chip; in sx150x_probe() local
640 chip = devm_kzalloc(&client->dev, in sx150x_probe()
642 if (!chip) in sx150x_probe()
645 sx150x_init_chip(chip, client, id->driver_data, pdata); in sx150x_probe()
646 rc = sx150x_init_hw(chip, pdata); in sx150x_probe()
650 rc = gpiochip_add(&chip->gpio_chip); in sx150x_probe()
655 rc = sx150x_install_irq_chip(chip, in sx150x_probe()
662 i2c_set_clientdata(client, chip); in sx150x_probe()
666 gpiochip_remove(&chip->gpio_chip); in sx150x_probe()
672 struct sx150x_chip *chip; in sx150x_remove() local
674 chip = i2c_get_clientdata(client); in sx150x_remove()
675 gpiochip_remove(&chip->gpio_chip); in sx150x_remove()