Lines Matching refs:rk806
364 static struct rk806 *rk806_master;
365 static struct rk806 *rk806_slaver;
373 struct rk806 *rk806; in rk806_master_store() local
383 rk806 = rk806_master; in rk806_master_store()
384 if (!rk806) { in rk806_master_store()
401 regmap_write(rk806->regmap, addr, data); in rk806_master_store()
402 regmap_read(rk806->regmap, addr, &data); in rk806_master_store()
415 regmap_read(rk806->regmap, addr, &data); in rk806_master_store()
433 struct rk806 *rk806; in rk806_slaver_store() local
443 rk806 = rk806_slaver; in rk806_slaver_store()
444 if (!rk806) { in rk806_slaver_store()
461 regmap_write(rk806->regmap, addr, data); in rk806_slaver_store()
462 regmap_read(rk806->regmap, addr, &data); in rk806_slaver_store()
474 regmap_read(rk806->regmap, addr, &data); in rk806_slaver_store()
492 int rk806_field_read(struct rk806 *rk806, in rk806_field_read() argument
498 ret = regmap_field_read(rk806->rmap_fields[field_id], &val); in rk806_field_read()
506 int rk806_field_write(struct rk806 *rk806, in rk806_field_write() argument
510 return regmap_field_write(rk806->rmap_fields[field_id], val); in rk806_field_write()
514 static void rk806_irq_init(struct rk806 *rk806) in rk806_irq_init() argument
517 rk806_field_write(rk806, INT_POL, RK806_INT_POL_LOW); in rk806_irq_init()
520 static int rk806_pinctrl_init(struct rk806 *rk806) in rk806_pinctrl_init() argument
522 struct device *dev = rk806->dev; in rk806_pinctrl_init()
524 rk806->pins = devm_kzalloc(dev, in rk806_pinctrl_init()
527 if (!rk806->pins) in rk806_pinctrl_init()
530 rk806->pins->p = devm_pinctrl_get(dev); in rk806_pinctrl_init()
531 if (IS_ERR(rk806->pins->p)) { in rk806_pinctrl_init()
532 rk806->pins->p = NULL; in rk806_pinctrl_init()
537 rk806->pins->default_st = pinctrl_lookup_state(rk806->pins->p, in rk806_pinctrl_init()
540 if (IS_ERR(rk806->pins->default_st)) in rk806_pinctrl_init()
543 rk806->pins->power_off = pinctrl_lookup_state(rk806->pins->p, in rk806_pinctrl_init()
545 if (IS_ERR(rk806->pins->power_off)) { in rk806_pinctrl_init()
546 rk806->pins->power_off = NULL; in rk806_pinctrl_init()
550 rk806->pins->sleep = pinctrl_lookup_state(rk806->pins->p, in rk806_pinctrl_init()
552 if (IS_ERR(rk806->pins->sleep)) { in rk806_pinctrl_init()
553 rk806->pins->sleep = NULL; in rk806_pinctrl_init()
557 rk806->pins->reset = pinctrl_lookup_state(rk806->pins->p, in rk806_pinctrl_init()
559 if (IS_ERR(rk806->pins->reset)) { in rk806_pinctrl_init()
560 rk806->pins->reset = NULL; in rk806_pinctrl_init()
564 rk806->pins->dvs = pinctrl_lookup_state(rk806->pins->p, in rk806_pinctrl_init()
566 if (IS_ERR(rk806->pins->dvs)) { in rk806_pinctrl_init()
567 rk806->pins->dvs = NULL; in rk806_pinctrl_init()
574 static irqreturn_t rk806_vb_low_irq(int irq, void *rk806) in rk806_vb_low_irq() argument
579 static int rk806_low_power_irqs(struct rk806 *rk806) in rk806_low_power_irqs() argument
584 pdata = rk806->pdata; in rk806_low_power_irqs()
589 rk806_field_write(rk806, VB_LO_ACT, VB_LO_ACT_INT); in rk806_low_power_irqs()
591 rk806_field_write(rk806, VB_LO_SEL, in rk806_low_power_irqs()
594 vb_lo_irq = regmap_irq_get_virq(rk806->irq_data, RK806_IRQ_VB_LO); in rk806_low_power_irqs()
596 dev_err(rk806->dev, "vb_lo_irq request failed!\n"); in rk806_low_power_irqs()
600 ret = devm_request_threaded_irq(rk806->dev, vb_lo_irq, in rk806_low_power_irqs()
604 "rk806_vb_low", rk806); in rk806_low_power_irqs()
606 dev_err(rk806->dev, "vb_lo_irq request failed!\n"); in rk806_low_power_irqs()
610 rk806->vb_lo_irq = vb_lo_irq; in rk806_low_power_irqs()
611 disable_irq(rk806->vb_lo_irq); in rk806_low_power_irqs()
617 static int rk806_parse_dt(struct rk806 *rk806) in rk806_parse_dt() argument
620 struct device *dev = rk806->dev; in rk806_parse_dt()
624 pdata = rk806->pdata; in rk806_parse_dt()
673 rk806_field_write(rk806, RST_FUN, 0x00); in rk806_parse_dt()
675 rk806_field_write(rk806, RST_FUN, rst_fun); in rk806_parse_dt()
679 rk806_field_write(rk806, PWRON_ON_TIME, 0x00); in rk806_parse_dt()
684 static int rk806_init(struct rk806 *rk806) in rk806_init() argument
689 pdata = rk806->pdata; in rk806_init()
697 rk806_field_write(rk806, VB_UV_SEL, vb_uv_sel); in rk806_init()
701 rk806_field_write(rk806, TSD_TEMP, TSD_TEMP_160); in rk806_init()
704 rk806_field_write(rk806, SLAVE_RESTART_FUN, 0x01); in rk806_init()
706 rk806_field_write(rk806, ENB2_2M, 0x01); in rk806_init()
708 rk806_low_power_irqs(rk806); in rk806_init()
713 int rk806_device_init(struct rk806 *rk806) in rk806_device_init() argument
715 struct device_node *np = rk806->dev->of_node; in rk806_device_init()
722 pdata = devm_kzalloc(rk806->dev, sizeof(*pdata), GFP_KERNEL); in rk806_device_init()
726 rk806->pdata = pdata; in rk806_device_init()
731 rk806->rmap_fields[i] = in rk806_device_init()
732 devm_regmap_field_alloc(rk806->dev, in rk806_device_init()
733 rk806->regmap, in rk806_device_init()
735 if (IS_ERR(rk806->rmap_fields[i])) { in rk806_device_init()
736 dev_err(rk806->dev, "cannot allocate regmap field\n"); in rk806_device_init()
737 return PTR_ERR(rk806->rmap_fields[i]); in rk806_device_init()
741 name_h = rk806_field_read(rk806, CHIP_NAME_H); in rk806_device_init()
742 name_l = rk806_field_read(rk806, CHIP_NAME_L); in rk806_device_init()
743 chip_ver = rk806_field_read(rk806, CHIP_VER); in rk806_device_init()
744 otp_ver = rk806_field_read(rk806, OTP_VER); in rk806_device_init()
745 dev_info(rk806->dev, "chip id: RK%x%x,ver:0x%x, 0x%x\n", in rk806_device_init()
748 rk806_field_write(rk806, ABNORDET_EN, 0x01); in rk806_device_init()
750 on_source = rk806_field_read(rk806, ON_SOURCE); in rk806_device_init()
751 off_source = rk806_field_read(rk806, OFF_SOURCE); in rk806_device_init()
752 dev_info(rk806->dev, "ON: 0x%x OFF:0x%x\n", on_source, off_source); in rk806_device_init()
754 rk806_parse_dt(rk806); in rk806_device_init()
756 rk806_irq_init(rk806); in rk806_device_init()
757 ret = devm_regmap_add_irq_chip(rk806->dev, in rk806_device_init()
758 rk806->regmap, in rk806_device_init()
759 rk806->irq, in rk806_device_init()
763 &rk806->irq_data); in rk806_device_init()
765 dev_err(rk806->dev, "Failed to add IRQ chip: err = %d\n", ret); in rk806_device_init()
769 ret = devm_mfd_add_devices(rk806->dev, in rk806_device_init()
775 regmap_irq_get_domain(rk806->irq_data)); in rk806_device_init()
777 dev_err(rk806->dev, "mfd_add_devices failed: %d\n", ret); in rk806_device_init()
781 rk806_pinctrl_init(rk806); in rk806_device_init()
782 rk806_init(rk806); in rk806_device_init()
789 dev_err(rk806->dev, "create %s sysfs error\n", np->name); in rk806_device_init()
791 rk806_master = rk806; in rk806_device_init()
798 dev_err(rk806->dev, "create %s sysfs error\n", np->name); in rk806_device_init()
800 rk806_slaver = rk806; in rk806_device_init()
808 int rk806_device_exit(struct rk806 *rk806) in rk806_device_exit() argument
810 struct device_node *np = rk806->dev->of_node; in rk806_device_exit()