[PATCH v2 0/2] input: misc: add support for Imagis ISA1200 haptic motor driver

Svyatoslav Ryhel posted 2 patches 1 month, 2 weeks ago
There is a newer version of this series
.../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
[PATCH v2 0/2] input: misc: add support for Imagis ISA1200 haptic motor driver
Posted by Svyatoslav Ryhel 1 month, 2 weeks ago
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
Re: [PATCH v2 0/2] input: misc: add support for Imagis ISA1200 haptic motor driver
Posted by Linus Walleij 1 month, 2 weeks ago
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
Re: [PATCH v2 0/2] input: misc: add support for Imagis ISA1200 haptic motor driver
Posted by Svyatoslav Ryhel 1 month, 2 weeks ago
чт, 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