.../bindings/input/imagis,isa1200.yaml | 140 +++++ drivers/input/misc/Kconfig | 11 + drivers/input/misc/Makefile | 1 + drivers/input/misc/isa1200.c | 507 ++++++++++++++++++ 4 files changed, 659 insertions(+) create mode 100644 Documentation/devicetree/bindings/input/imagis,isa1200.yaml create mode 100644 drivers/input/misc/isa1200.c
The ISA1200 is a haptic feedback unit from Imagis Technology using two motors for haptic feedback in mobile phones. Used in many mobile devices c. 2012 including Samsung Galxy S Advance GT-I9070 (Janice), Samsung Beam GT-I8350 (Gavini), LG Optimus 4X P880 and LG Optimus Vu P895. The exact datasheet for the ISA1200 is not available; all data was modeled based on available downstream kernel sources for various devices and fragments of information scattered across the internet. --- Changes in v2: - imagis,clk-div switched to accept actual divider value - dropped DT header - adjusted imagis,period-ns range - initiated hctrl0 and hctrl1 values in isa1200_start - fixed situation when PWM might return -EPROBE_DEFER to be treated properly - added chech a clock or PWM is available - fixed regulator voltages check being off by 10 - added chech if state.period is not zero - added action call to disable clock and gpios on error - used managed version of work init - added work cancel on suspend - PW calls are done under mutex lock --- Linus Walleij (1): Input: isa1200 - new driver for Imagis ISA1200 Svyatoslav Ryhel (1): dt-bindings: input: Document Imagis ISA1200 haptic motor driver .../bindings/input/imagis,isa1200.yaml | 140 +++++ drivers/input/misc/Kconfig | 11 + drivers/input/misc/Makefile | 1 + drivers/input/misc/isa1200.c | 507 ++++++++++++++++++ 4 files changed, 659 insertions(+) create mode 100644 Documentation/devicetree/bindings/input/imagis,isa1200.yaml create mode 100644 drivers/input/misc/isa1200.c -- 2.51.0
On Tue, Apr 28, 2026 at 1:43 PM Svyatoslav Ryhel <clamor95@gmail.com> wrote:
> The ISA1200 is a haptic feedback unit from Imagis Technology using two
> motors for haptic feedback in mobile phones. Used in many mobile devices
> c. 2012 including Samsung Galxy S Advance GT-I9070 (Janice), Samsung Beam
> GT-I8350 (Gavini), LG Optimus 4X P880 and LG Optimus Vu P895.
>
> The exact datasheet for the ISA1200 is not available; all data was modeled
> based on available downstream kernel sources for various devices and
> fragments of information scattered across the internet.
I applied a patch to the Janice devicetree like this:
+ /* Haptic feedback unit Immersion ISA1200 */
+ haptic-engine@49 {
+ compatible = "immersion,isa1200";
+ reg = <0x49>;
+
+ /* clkout1 from ACLK divided by 8 */
+ clocks = <&clkout_clk DB8500_CLKOUT_1
DB8500_CLKOUT_SRC_ACLK 8>;
+
+ /*
+ * GPIO194 pin HEN (motor hardware enable)
+ * GPIO195 pin LEN (motor LDO enable)
+ */
+ control-gpios = <&gpio6 2 GPIO_ACTIVE_HIGH>,
<&gpio6 3 GPIO_ACTIVE_HIGH>;
+
+ imagis,clk-div = <256>;
+ imagis,pll-div = <2>;
+
+ imagis,mode = <0>; /* LRA_MODE */
+
+ imagis,period-ns = <1340000>;
+ imagis,duty-cycle-ns = <100>;
+
+ pinctrl-names = "default";
+ pinctrl-0 = <&isa1200_janice_default>;
+
+ ldo {
+ regulator-name = "vdd_vib";
+ regulator-min-microvolt = <3000000>;
+ regulator-max-microvolt = <3000000>;
+ };
+ };
It works, I get rumble on the keys.
Tested-by: Linus Walleij <linusw@kernel.org>
Yours,
Linus Walleij
чт, 30 квіт. 2026 р. о 12:16 Linus Walleij <linusw@kernel.org> пише:
>
> On Tue, Apr 28, 2026 at 1:43 PM Svyatoslav Ryhel <clamor95@gmail.com> wrote:
>
> > The ISA1200 is a haptic feedback unit from Imagis Technology using two
> > motors for haptic feedback in mobile phones. Used in many mobile devices
> > c. 2012 including Samsung Galxy S Advance GT-I9070 (Janice), Samsung Beam
> > GT-I8350 (Gavini), LG Optimus 4X P880 and LG Optimus Vu P895.
> >
> > The exact datasheet for the ISA1200 is not available; all data was modeled
> > based on available downstream kernel sources for various devices and
> > fragments of information scattered across the internet.
>
> I applied a patch to the Janice devicetree like this:
>
> + /* Haptic feedback unit Immersion ISA1200 */
> + haptic-engine@49 {
> + compatible = "immersion,isa1200";
> + reg = <0x49>;
> +
> + /* clkout1 from ACLK divided by 8 */
> + clocks = <&clkout_clk DB8500_CLKOUT_1
> DB8500_CLKOUT_SRC_ACLK 8>;
> +
> + /*
> + * GPIO194 pin HEN (motor hardware enable)
> + * GPIO195 pin LEN (motor LDO enable)
> + */
> + control-gpios = <&gpio6 2 GPIO_ACTIVE_HIGH>,
> <&gpio6 3 GPIO_ACTIVE_HIGH>;
> +
> + imagis,clk-div = <256>;
> + imagis,pll-div = <2>;
> +
> + imagis,mode = <0>; /* LRA_MODE */
> +
> + imagis,period-ns = <1340000>;
Hello Linus!
May you please try with imagis,period-ns = <12900>; and <11900> which
one will fit better.
> + imagis,duty-cycle-ns = <100>;
> +
> + pinctrl-names = "default";
> + pinctrl-0 = <&isa1200_janice_default>;
> +
> + ldo {
> + regulator-name = "vdd_vib";
> + regulator-min-microvolt = <3000000>;
> + regulator-max-microvolt = <3000000>;
> + };
> + };
>
> It works, I get rumble on the keys.
>
> Tested-by: Linus Walleij <linusw@kernel.org>
>
Very nice! Thank you for testing!
> Yours,
> Linus Walleij
© 2016 - 2026 Red Hat, Inc.