Lines Matching refs:vib

82 static int pm8xxx_vib_set(struct pm8xxx_vib *vib, bool on)  in pm8xxx_vib_set()  argument
85 unsigned int val = vib->reg_vib_drv; in pm8xxx_vib_set()
86 const struct pm8xxx_regs *regs = vib->regs; in pm8xxx_vib_set()
89 val |= (vib->level << regs->drv_shift) & regs->drv_mask; in pm8xxx_vib_set()
93 rc = regmap_write(vib->regmap, regs->drv_addr, val); in pm8xxx_vib_set()
97 vib->reg_vib_drv = val; in pm8xxx_vib_set()
100 rc = regmap_update_bits(vib->regmap, regs->enable_addr, in pm8xxx_vib_set()
112 struct pm8xxx_vib *vib = container_of(work, struct pm8xxx_vib, work); in pm8xxx_work_handler() local
113 const struct pm8xxx_regs *regs = vib->regs; in pm8xxx_work_handler()
117 rc = regmap_read(vib->regmap, regs->drv_addr, &val); in pm8xxx_work_handler()
125 if (vib->speed) { in pm8xxx_work_handler()
126 vib->active = true; in pm8xxx_work_handler()
127 vib->level = ((VIB_MAX_LEVELS * vib->speed) / MAX_FF_SPEED) + in pm8xxx_work_handler()
129 vib->level /= 100; in pm8xxx_work_handler()
131 vib->active = false; in pm8xxx_work_handler()
132 vib->level = VIB_MIN_LEVEL_mV / 100; in pm8xxx_work_handler()
135 pm8xxx_vib_set(vib, vib->active); in pm8xxx_work_handler()
146 struct pm8xxx_vib *vib = input_get_drvdata(dev); in pm8xxx_vib_close() local
148 cancel_work_sync(&vib->work); in pm8xxx_vib_close()
149 if (vib->active) in pm8xxx_vib_close()
150 pm8xxx_vib_set(vib, false); in pm8xxx_vib_close()
164 struct pm8xxx_vib *vib = input_get_drvdata(dev); in pm8xxx_vib_play_effect() local
166 vib->speed = effect->u.rumble.strong_magnitude >> 8; in pm8xxx_vib_play_effect()
167 if (!vib->speed) in pm8xxx_vib_play_effect()
168 vib->speed = effect->u.rumble.weak_magnitude >> 9; in pm8xxx_vib_play_effect()
170 schedule_work(&vib->work); in pm8xxx_vib_play_effect()
177 struct pm8xxx_vib *vib; in pm8xxx_vib_probe() local
183 vib = devm_kzalloc(&pdev->dev, sizeof(*vib), GFP_KERNEL); in pm8xxx_vib_probe()
184 if (!vib) in pm8xxx_vib_probe()
187 vib->regmap = dev_get_regmap(pdev->dev.parent, NULL); in pm8xxx_vib_probe()
188 if (!vib->regmap) in pm8xxx_vib_probe()
195 INIT_WORK(&vib->work, pm8xxx_work_handler); in pm8xxx_vib_probe()
196 vib->vib_input_dev = input_dev; in pm8xxx_vib_probe()
201 error = regmap_read(vib->regmap, regs->drv_addr, &val); in pm8xxx_vib_probe()
206 error = regmap_write(vib->regmap, regs->drv_addr, val); in pm8xxx_vib_probe()
210 vib->regs = regs; in pm8xxx_vib_probe()
211 vib->reg_vib_drv = val; in pm8xxx_vib_probe()
216 input_set_drvdata(input_dev, vib); in pm8xxx_vib_probe()
217 input_set_capability(vib->vib_input_dev, EV_FF, FF_RUMBLE); in pm8xxx_vib_probe()
233 platform_set_drvdata(pdev, vib); in pm8xxx_vib_probe()
239 struct pm8xxx_vib *vib = dev_get_drvdata(dev); in pm8xxx_vib_suspend() local
242 pm8xxx_vib_set(vib, false); in pm8xxx_vib_suspend()