Lines Matching defs:haptics

284 static int da7280_haptic_mem_update(struct da7280_haptic *haptics)
290 error = regmap_read(haptics->regmap, DA7280_IRQ_STATUS1, &val);
294 dev_warn(haptics->dev,
301 error = regmap_read(haptics->regmap, DA7280_MEM_CTL2, &val);
305 dev_warn(haptics->dev, "Please unlock the bit first\n");
310 error = regmap_update_bits(haptics->regmap,
317 error = regmap_read(haptics->regmap, DA7280_MEM_CTL1, &val);
321 return regmap_bulk_write(haptics->regmap, val, haptics->snp_mem,
325 static int da7280_haptic_set_pwm(struct da7280_haptic *haptics, bool enabled)
331 if (!haptics->gain && enabled) {
332 dev_err(haptics->dev, "Unable to enable pwm with 0 gain\n");
336 pwm_get_state(haptics->pwm_dev, &state);
339 period_mag_multi = (u64)state.period * haptics->gain;
347 if (!haptics->acc_en) {
355 error = pwm_apply_state(haptics->pwm_dev, &state);
357 dev_err(haptics->dev, "Failed to apply pwm state: %d\n", error);
362 static void da7280_haptic_activate(struct da7280_haptic *haptics)
366 if (haptics->active)
369 switch (haptics->op_mode) {
372 if (haptics->acc_en && haptics->level > 0x7F)
373 haptics->level = 0x7F;
374 else if (haptics->level > 0xFF)
375 haptics->level = 0xFF;
378 error = regmap_write(haptics->regmap, DA7280_TOP_CTL2,
379 haptics->level);
381 dev_err(haptics->dev,
383 haptics->level, error);
389 if (da7280_haptic_set_pwm(haptics, true))
409 dev_err(haptics->dev, "Invalid op mode %d\n", haptics->op_mode);
413 error = regmap_update_bits(haptics->regmap,
416 haptics->op_mode);
418 dev_err(haptics->dev,
423 if (haptics->op_mode == DA7280_PWM_MODE ||
424 haptics->op_mode == DA7280_RTWM_MODE) {
425 error = regmap_update_bits(haptics->regmap,
430 dev_err(haptics->dev,
436 haptics->active = true;
439 static void da7280_haptic_deactivate(struct da7280_haptic *haptics)
443 if (!haptics->active)
447 error = regmap_update_bits(haptics->regmap,
451 dev_err(haptics->dev,
456 switch (haptics->op_mode) {
458 error = regmap_write(haptics->regmap,
461 dev_err(haptics->dev,
468 if (da7280_haptic_set_pwm(haptics, false))
474 error = regmap_update_bits(haptics->regmap,
478 dev_err(haptics->dev,
486 dev_err(haptics->dev, "Invalid op mode %d\n", haptics->op_mode);
490 haptics->active = false;
495 struct da7280_haptic *haptics =
497 int val = haptics->val;
500 da7280_haptic_activate(haptics);
502 da7280_haptic_deactivate(haptics);
509 struct da7280_haptic *haptics = input_get_drvdata(dev);
516 if (haptics->active)
522 haptics->op_mode = haptics->const_op_mode;
523 if (haptics->op_mode == DA7280_DRO_MODE) {
525 haptics->level = tmp / 0x7FFF;
529 haptics->gain = effect->u.constant.level <= 0 ?
536 dev_err(haptics->dev,
556 dev_err(haptics->dev, "Invalid waveform data size\n");
565 memset(haptics->snp_mem, 0, DA7280_SNP_MEM_SIZE);
569 dev_err(haptics->dev,
574 haptics->snp_mem[i] = (u8)data[i];
577 error = da7280_haptic_mem_update(haptics);
579 dev_err(haptics->dev,
594 dev_err(haptics->dev,
601 haptics->ps_seq_id = data[DA7280_CUSTOM_SEQ_ID_IDX] & 0x0f;
602 haptics->ps_seq_loop = data[DA7280_CUSTOM_SEQ_LOOP_IDX] & 0x0f;
603 haptics->op_mode = haptics->periodic_op_mode;
605 val = FIELD_PREP(DA7280_PS_SEQ_ID_MASK, haptics->ps_seq_id) |
607 haptics->ps_seq_loop);
608 error = regmap_write(haptics->regmap, DA7280_SEQ_CTL2, val);
610 dev_err(haptics->dev,
625 dev_err(haptics->dev,
633 haptics->gpi_ctl[num].seq_id =
635 haptics->op_mode = haptics->periodic_op_mode;
638 haptics->gpi_ctl[num].seq_id);
639 error = regmap_update_bits(haptics->regmap,
644 dev_err(haptics->dev,
651 dev_err(haptics->dev, "Unsupported effect type: %d\n",
662 struct da7280_haptic *haptics = input_get_drvdata(dev);
664 if (!haptics->op_mode) {
665 dev_warn(haptics->dev, "No effects have been uploaded\n");
669 if (likely(!haptics->suspended)) {
670 haptics->val = val;
671 schedule_work(&haptics->work);
677 static int da7280_haptic_start(struct da7280_haptic *haptics)
681 error = regmap_update_bits(haptics->regmap,
686 dev_err(haptics->dev, "Unable to enable device: %d\n", error);
693 static void da7280_haptic_stop(struct da7280_haptic *haptics)
697 cancel_work_sync(&haptics->work);
700 da7280_haptic_deactivate(haptics);
702 error = regmap_update_bits(haptics->regmap, DA7280_TOP_CTL1,
705 dev_err(haptics->dev, "Failed to disable device: %d\n", error);
710 struct da7280_haptic *haptics = input_get_drvdata(dev);
712 return da7280_haptic_start(haptics);
717 struct da7280_haptic *haptics = input_get_drvdata(dev);
719 da7280_haptic_stop(haptics);
773 struct da7280_haptic *haptics)
786 haptics->dev_type = DA7280_DEV_MAX;
789 haptics->dev_type = da7280_haptic_of_mode_str(dev, str);
791 haptics->const_op_mode = DA7280_DRO_MODE;
794 haptics->const_op_mode = DA7280_PWM_MODE;
796 haptics->periodic_op_mode = DA7280_RTWM_MODE;
799 haptics->periodic_op_mode = DA7280_ETWM_MODE;
801 haptics->nommax = DA7280_SKIP_INIT;
804 haptics->nommax = da7280_haptic_of_volt_rating_set(val);
806 haptics->absmax = DA7280_SKIP_INIT;
809 haptics->absmax = da7280_haptic_of_volt_rating_set(val);
811 haptics->imax = DA7280_IMAX_DEFAULT;
814 haptics->imax = (val - 28600) / DA7280_IMAX_STEP + 1;
816 haptics->impd = DA7280_IMPD_DEFAULT;
819 haptics->impd = val;
821 haptics->resonant_freq_h = DA7280_SKIP_INIT;
822 haptics->resonant_freq_l = DA7280_SKIP_INIT;
827 haptics->resonant_freq_h =
829 haptics->resonant_freq_l =
832 haptics->resonant_freq_h = DA7280_RESONT_FREQH_DFT;
833 haptics->resonant_freq_l = DA7280_RESONT_FREQL_DFT;
838 haptics->ps_seq_id = 0;
841 haptics->ps_seq_id = val;
843 haptics->ps_seq_loop = 0;
846 haptics->ps_seq_loop = val;
851 haptics->gpi_ctl[i].seq_id = DA7280_GPI_SEQ_ID_DFT + i;
854 haptics->gpi_ctl[i].seq_id = val;
857 haptics->gpi_ctl[i].mode = 0;
860 haptics->gpi_ctl[i].mode =
864 haptics->gpi_ctl[i].polarity = 0;
867 haptics->gpi_ctl[i].polarity =
871 haptics->bemf_sense_en =
873 haptics->freq_track_en =
875 haptics->acc_en =
877 haptics->rapid_stop_en =
879 haptics->amp_pid_en =
882 haptics->mem_update = false;
886 haptics->mem_update = true;
887 memset(haptics->snp_mem, 0, DA7280_SNP_MEM_SIZE);
890 haptics->snp_mem[i] = (u8)mem[i];
892 dev_err(haptics->dev,
895 haptics->mem_update = false;
904 struct da7280_haptic *haptics = data;
905 struct device *dev = haptics->dev;
910 error = regmap_bulk_read(haptics->regmap, DA7280_IRQ_EVENT1,
918 error = regmap_write(haptics->regmap, DA7280_IRQ_EVENT1, events[0]);
929 error = regmap_update_bits(haptics->regmap, DA7280_TOP_CTL1,
937 haptics->active = false;
962 static int da7280_init(struct da7280_haptic *haptics)
973 if (haptics->dev_type == DA7280_DEV_MAX) {
974 error = regmap_read(haptics->regmap, DA7280_TOP_CFG1, &val);
978 haptics->dev_type = val & DA7280_ACTUATOR_TYPE_MASK ?
983 if (haptics->dev_type == DA7280_LRA &&
984 haptics->resonant_freq_l != DA7280_SKIP_INIT) {
985 error = regmap_write(haptics->regmap, DA7280_FRQ_LRA_PER_H,
986 haptics->resonant_freq_h);
989 error = regmap_write(haptics->regmap, DA7280_FRQ_LRA_PER_L,
990 haptics->resonant_freq_l);
993 } else if (haptics->dev_type == DA7280_ERM_COIN) {
994 error = regmap_update_bits(haptics->regmap, DA7280_TOP_INT_CFG1,
1003 error = regmap_update_bits(haptics->regmap, DA7280_TOP_CFG4,
1008 haptics->acc_en = false;
1009 haptics->rapid_stop_en = false;
1010 haptics->amp_pid_en = false;
1020 (haptics->dev_type ? 1 : 0)) |
1022 (haptics->bemf_sense_en ? 1 : 0)) |
1024 (haptics->freq_track_en ? 1 : 0)) |
1026 (haptics->acc_en ? 1 : 0)) |
1028 (haptics->rapid_stop_en ? 1 : 0)) |
1030 (haptics->amp_pid_en ? 1 : 0));
1032 error = regmap_update_bits(haptics->regmap, DA7280_TOP_CFG1, mask, val);
1036 error = regmap_update_bits(haptics->regmap, DA7280_TOP_CFG5,
1038 haptics->acc_en ?
1043 error = regmap_update_bits(haptics->regmap,
1046 haptics->acc_en ?
1051 if (haptics->nommax != DA7280_SKIP_INIT) {
1052 error = regmap_write(haptics->regmap, DA7280_ACTUATOR1,
1053 haptics->nommax);
1058 if (haptics->absmax != DA7280_SKIP_INIT) {
1059 error = regmap_write(haptics->regmap, DA7280_ACTUATOR2,
1060 haptics->absmax);
1065 error = regmap_update_bits(haptics->regmap, DA7280_ACTUATOR3,
1066 DA7280_IMAX_MASK, haptics->imax);
1070 v2i_factor = haptics->impd * (haptics->imax + 4) / 1610400;
1071 error = regmap_write(haptics->regmap, DA7280_CALIB_V2I_L,
1075 error = regmap_write(haptics->regmap, DA7280_CALIB_V2I_H,
1080 error = regmap_update_bits(haptics->regmap,
1087 if (haptics->mem_update) {
1088 error = da7280_haptic_mem_update(haptics);
1094 val = FIELD_PREP(DA7280_PS_SEQ_ID_MASK, haptics->ps_seq_id) |
1095 FIELD_PREP(DA7280_PS_SEQ_LOOP_MASK, haptics->ps_seq_loop);
1096 error = regmap_write(haptics->regmap, DA7280_SEQ_CTL2, val);
1103 haptics->gpi_ctl[i].seq_id) |
1105 haptics->gpi_ctl[i].mode) |
1107 haptics->gpi_ctl[i].polarity);
1108 error = regmap_write(haptics->regmap,
1115 error = regmap_update_bits(haptics->regmap,
1123 error = regmap_write(haptics->regmap, DA7280_IRQ_EVENT1, 0xff);
1127 error = regmap_update_bits(haptics->regmap,
1135 haptics->active = false;
1139 dev_err(haptics->dev, "chip initialization error: %d\n", error);
1146 struct da7280_haptic *haptics;
1157 haptics = devm_kzalloc(dev, sizeof(*haptics), GFP_KERNEL);
1158 if (!haptics)
1161 haptics->dev = dev;
1163 da7280_parse_properties(dev, haptics);
1165 if (haptics->const_op_mode == DA7280_PWM_MODE) {
1166 haptics->pwm_dev = devm_pwm_get(dev, NULL);
1167 error = PTR_ERR_OR_ZERO(haptics->pwm_dev);
1176 pwm_init_state(haptics->pwm_dev, &state);
1178 error = pwm_apply_state(haptics->pwm_dev, &state);
1195 INIT_WORK(&haptics->work, da7280_haptic_work);
1197 haptics->client = client;
1198 i2c_set_clientdata(client, haptics);
1200 haptics->regmap = devm_regmap_init_i2c(client,
1202 error = PTR_ERR_OR_ZERO(haptics->regmap);
1208 error = da7280_init(haptics);
1225 input_set_drvdata(input_dev, haptics);
1226 haptics->input_dev = input_dev;
1228 input_set_capability(haptics->input_dev, EV_FF, FF_PERIODIC);
1229 input_set_capability(haptics->input_dev, EV_FF, FF_CUSTOM);
1230 input_set_capability(haptics->input_dev, EV_FF, FF_CONSTANT);
1231 input_set_capability(haptics->input_dev, EV_FF, FF_GAIN);
1233 error = input_ff_create(haptics->input_dev,
1253 "da7280-haptics", haptics);
1265 struct da7280_haptic *haptics = dev_get_drvdata(dev);
1267 mutex_lock(&haptics->input_dev->mutex);
1273 spin_lock_irq(&haptics->input_dev->event_lock);
1274 haptics->suspended = true;
1275 spin_unlock_irq(&haptics->input_dev->event_lock);
1277 da7280_haptic_stop(haptics);
1279 mutex_unlock(&haptics->input_dev->mutex);
1286 struct da7280_haptic *haptics = dev_get_drvdata(dev);
1289 mutex_lock(&haptics->input_dev->mutex);
1291 retval = da7280_haptic_start(haptics);
1293 spin_lock_irq(&haptics->input_dev->event_lock);
1294 haptics->suspended = false;
1295 spin_unlock_irq(&haptics->input_dev->event_lock);
1298 mutex_unlock(&haptics->input_dev->mutex);
1329 MODULE_DESCRIPTION("DA7280 haptics driver");