Hi Kristoffer,

On 7/18/07, Kristoffer Ericson <[EMAIL PROTECTED]> wrote:
Greetings,


Thank you for your patch, I have a couple of comments.

Couldnt find any mailinglist, but please CC this there if there is one.


CCing linus-input...

+       /* Lets drag them out one at a time */
+       while (count-- > 0) {
+               /* Exchange TxDummy for a real key */
+               key = kbd_data = jornada_ssp_inout(TxDummy);
+
+               if (key < 0) { /* whoops, no more waiting */

key is declared as "unsigned char", how can this condition ever trigger?

+                   jornada_ssp_end(); /* End transmission */
+                   return IRQ_HANDLED;
+               }
+
+               if (key > 128) /* Key released */
+                       key = key - 128;
+
+               keycode = jornada_normal_keymap[key];
+
+               /* A key pressed down */
+               if (kbd_data < 128) {
+                       input_report_key(input_dev,keycode, 1);
+                       input_sync(input_dev);
+               }
+               else { /* Key released */
+                       input_report_key(input_dev, keycode, 0);
+                       input_sync(input_dev);
+               }

All of this can be probably written as:
       input_report_key(input_dev,
               jornada_normal_keymap[kbd_data & 0x7f],
               !(kbd_data & 0x80));
      input_sync(input_dev);

+       }
+       jornada_ssp_end(); /* End Transmission */
+       return IRQ_HANDLED;
+};
+
+static int jornada720_kbd_probe(struct platform_device *pdev)

__devinit?

+{
+       int i, ret;
+
+       input_dev = input_allocate_device();
+       if (!input_dev) {
+               return -ENOMEM;
+       };
+
+       input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_REP);
+       input_dev->keybit[LONG(KEY_SUSPEND)] |= BIT(KEY_SUSPEND);

Why special treatment of KEY_SUSPEND?

+
+       input_dev->name = "HP Jornada 720 keyboard";
+       input_dev->phys = "jornadakbd/input0";

please add "input_dev->dev.parent = &pdev->dev;" to place input device
into proper place in sysfs.

+
+       for (i=0 ; i<=128 ; i++) {
+               if (jornada_normal_keymap[i])
+                       set_bit(jornada_normal_keymap[i], input_dev->keybit);
+       }


Please allocate a copy of keymap and assign keycode, keycodemax and
keycodesize in input_dev so that keymap can be adjusted at runtime.

+
+       ret = request_irq(IRQ_GPIO0,
+                       jornada720_kbd_interrupt,
+                       IRQF_DISABLED | IRQF_TRIGGER_FALLING,
+                       "jornadakbd", input_dev);
+       if (ret) {
+               printk(KERN_INFO "Unable to grab IRQ for %s: %d\n", 
"jornadakbd", ret);
+               input_free_device(input_dev);
+               return ret;
+       }
+
+       input_register_device(input_dev);

Error hanling please.

+
+       return 0;
+};
+
+static int jornada720_kbd_remove(struct platform_device *pdev)

__devexit?

+{
+       free_irq(IRQ_GPIO0, input_dev);
+       input_unregister_device(input_dev);
+       return 0;
+}
+
+static struct platform_driver jornada720_kbd_driver = {
+        .driver  = {
+                  .name    = "jornada720_kbd",
+                },
+       .probe   = jornada720_kbd_probe,
+       .remove  = jornada720_kbd_remove,
+};
+
+static int __devinit jornada720_kbd_init(void)
+{
+        printk(KERN_INFO "HP Jornada 720 keyboard driver initialized\n");

I'd lose this printk - input core will print appropriate message when
input device is registered.

+       return platform_driver_register(&jornada720_kbd_driver);
+}
+
+static void __exit jornada720_kbd_exit(void)
+{
+       platform_driver_unregister(&jornada720_kbd_driver);
+}
+
+module_init(jornada720_kbd_init);
+module_exit(jornada720_kbd_exit);


Kconfig and Makefile changes seem to be missing..?

--
Dmitry

Reply via email to