diff --git a/core/embed/io/haptic/drv2625/actuators/ld0625bc.h b/core/embed/io/haptic/drv2625/actuators/ld0625bc.h
new file mode 100644
index 00000000000..ea4e69f01f1
--- /dev/null
+++ b/core/embed/io/haptic/drv2625/actuators/ld0625bc.h
@@ -0,0 +1,37 @@
+/*
+ * This file is part of the Trezor project, https://trezor.io/
+ *
+ * Copyright (c) SatoshiLabs
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#define ACTUATOR_LRA
+#define ACTUATOR_CLOSED_LOOP
+
+#define ACTUATOR_FREQUENCY (260)
+#define ACTUATOR_VOLTAGE (0.7)
+
+#define ACTUATOR_LRA_PERIOD ((int)((1000000 / ACTUATOR_FREQUENCY) / 24.615))
+
+// open-loop mode
+// V = 21.32 * 10^(-3) * OD_CLAMP * sqrt(1 - fLRA * 800 * 10^(-6))
+#define ACTUATOR_OD_CLAMP (37)
+
+// closed-loop mode
+// V = (20.58 * 10^(-3) * RATED_VOLTAGE) / sqrt (1 - (4 * tSAMPLE_TIME + 300 *
+// 10^(-6)) * fLRA) where tSAMPLE_TIME = 300us, by default
+#define ACTUATOR_RATED_VOLTAGE (27)
diff --git a/core/embed/io/haptic/drv2625/actuators/vg1040003d.h b/core/embed/io/haptic/drv2625/actuators/vg1040003d.h
index e18e836aa1d..038ca6f696f 100644
--- a/core/embed/io/haptic/drv2625/actuators/vg1040003d.h
+++ b/core/embed/io/haptic/drv2625/actuators/vg1040003d.h
@@ -1,3 +1,23 @@
+/*
+ * This file is part of the Trezor project, https://trezor.io/
+ *
+ * Copyright (c) SatoshiLabs
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
#define ACTUATOR_LRA
#define ACTUATOR_OPEN_LOOP
diff --git a/core/embed/io/haptic/drv2625/drv2625.c b/core/embed/io/haptic/drv2625/drv2625.c
index 9da82675d49..fd1e1901508 100644
--- a/core/embed/io/haptic/drv2625/drv2625.c
+++ b/core/embed/io/haptic/drv2625/drv2625.c
@@ -150,10 +150,17 @@ bool haptic_init(void) {
goto cleanup;
}
+#ifdef ACTUATOR_OPEN_LOOP
if (!drv2625_set_reg(driver->i2c_bus, DRV2625_REG_OD_CLAMP,
ACTUATOR_OD_CLAMP)) {
goto cleanup;
}
+#elif defined ACTUATOR_CLOSED_LOOP
+ if (!drv2625_set_reg(driver->i2c_bus, DRV2625_REG_RATED_VOLTAGE,
+ ACTUATOR_RATED_VOLTAGE)) {
+ goto cleanup;
+ }
+#endif
if (!drv2625_set_reg(driver->i2c_bus, DRV2625_REG_LRA_WAVE_SHAPE,
DRV2625_REG_LRA_WAVE_SHAPE_SINE)) {
diff --git a/core/embed/io/haptic/drv2625/drv2625.h b/core/embed/io/haptic/drv2625/drv2625.h
index fe67b2c77ff..2c63a9715b8 100644
--- a/core/embed/io/haptic/drv2625/drv2625.h
+++ b/core/embed/io/haptic/drv2625/drv2625.h
@@ -1,5 +1,23 @@
-#ifndef TREZOR_HAL_DRV_2625_H
-#define TREZOR_HAL_DRV_2625_H
+/*
+ * This file is part of the Trezor project, https://trezor.io/
+ *
+ * Copyright (c) SatoshiLabs
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
// I2C address of the DRV2625 on the I2C bus.
#define DRV2625_I2C_ADDRESS 0x5A
@@ -47,6 +65,7 @@
#define DRV2625_REG_GO_GO 0x01
#define DRV2625_REG_OD_CLAMP 0x20
+#define DRV2625_REG_RATED_VOLTAGE 0x20
#define DRV2625_REG_LRA_WAVE_SHAPE 0x2C
#define DRV2625_REG_LRA_WAVE_SHAPE_SINE 0x01
@@ -183,5 +202,3 @@ typedef enum {
SMOOTH_HUM_4_40 = 122,
SMOOTH_HUM_5_20 = 123,
} drv2625_lib_effect_t;
-
-#endif // TREZOR_HAL_DRV_2625_H
diff --git a/core/embed/io/haptic/inc/io/haptic.h b/core/embed/io/haptic/inc/io/haptic.h
index b6e1e26e3d1..5fd3a510183 100644
--- a/core/embed/io/haptic/inc/io/haptic.h
+++ b/core/embed/io/haptic/inc/io/haptic.h
@@ -17,15 +17,14 @@
* along with this program. If not, see .
*/
-#ifndef TREZORHAL_HAPTIC_H
-#define TREZORHAL_HAPTIC_H
+#pragma once
#include
typedef enum {
// Effect at the start of a button press
HAPTIC_BUTTON_PRESS = 0,
- // Effect at the and of hold-to-confirm action
+ // Effect at the end of hold-to-confirm action
HAPTIC_HOLD_TO_CONFIRM = 1,
} haptic_effect_t;
@@ -86,5 +85,3 @@ bool haptic_play(haptic_effect_t effect);
//
// Returns `true` if the effect was successfully started.
bool haptic_play_custom(int8_t amplitude_pct, uint16_t duration_ms);
-
-#endif // TREZORHAL_HAPTIC_H
diff --git a/core/embed/models/T3W1/boards/trezor_t3w1_revA.h b/core/embed/models/T3W1/boards/trezor_t3w1_revA.h
index daf289636db..302c0a7a95b 100644
--- a/core/embed/models/T3W1/boards/trezor_t3w1_revA.h
+++ b/core/embed/models/T3W1/boards/trezor_t3w1_revA.h
@@ -121,7 +121,7 @@
#define TOUCH_INT_PIN GPIO_PIN_3
#define DRV2625_I2C_INSTANCE 2
-#define HAPTIC_ACTUATOR "actuators/vg1040003d.h"
+#define HAPTIC_ACTUATOR "actuators/ld0625bc.h"
#define DRV2625_TRIG_PIN GPIO_PIN_2
#define DRV2625_TRIG_PORT GPIOA
#define DRV2625_TRIG_CLK_ENA __HAL_RCC_GPIOA_CLK_ENABLE
diff --git a/core/embed/models/T3W1/boards/trezor_t3w1_revA0.h b/core/embed/models/T3W1/boards/trezor_t3w1_revA0.h
index 44bdbfb8805..fe764385527 100644
--- a/core/embed/models/T3W1/boards/trezor_t3w1_revA0.h
+++ b/core/embed/models/T3W1/boards/trezor_t3w1_revA0.h
@@ -120,7 +120,7 @@
#define TOUCH_INT_PIN GPIO_PIN_3
#define DRV2625_I2C_INSTANCE 2
-#define HAPTIC_ACTUATOR "actuators/vg1040003d.h"
+#define HAPTIC_ACTUATOR "actuators/ld0625bc.h"
#define DRV2625_TRIG_PIN GPIO_PIN_2
#define DRV2625_TRIG_PORT GPIOA
#define DRV2625_TRIG_CLK_ENA __HAL_RCC_GPIOA_CLK_ENABLE
diff --git a/core/embed/models/T3W1/boards/trezor_t3w1_revB.h b/core/embed/models/T3W1/boards/trezor_t3w1_revB.h
index d29b67160b1..047b7ea02c5 100644
--- a/core/embed/models/T3W1/boards/trezor_t3w1_revB.h
+++ b/core/embed/models/T3W1/boards/trezor_t3w1_revB.h
@@ -121,7 +121,7 @@
#define TOUCH_INT_PIN GPIO_PIN_3
#define DRV2625_I2C_INSTANCE 2
-#define HAPTIC_ACTUATOR "actuators/vg1040003d.h"
+#define HAPTIC_ACTUATOR "actuators/ld0625bc.h"
#define DRV2625_TRIG_PIN GPIO_PIN_2
#define DRV2625_TRIG_PORT GPIOA
#define DRV2625_TRIG_CLK_ENA __HAL_RCC_GPIOA_CLK_ENABLE