Re: [PATCH v4 2/4] OMAP4: Keyboard device registration

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Charu, Kevin,

On Thu, Jun 17, 2010 at 4:08 PM, Kevin Hilman
<khilman@xxxxxxxxxxxxxxxxxxx> wrote:
> "Varadarajan, Charulatha" <charu@xxxxxx> writes:

[...]

>>> +
>>> +    oh = omap_hwmod_lookup(oh_name);
>>
>> Use omap_hwmod_for_each_by_class() instead of lookup by name.
>
> Yes.

how about handling all keypad data in devices.c and add
omap_init_keypad() under omap2_init_devices()?

diff --git a/arch/arm/mach-omap2/devices.c b/arch/arm/mach-omap2/devices.c

+#ifdef CONFIG_ARCH_OMAP4
+static int sdp4430_keymap[] = {
+	KEY(0, 0, KEY_E),
+	KEY(0, 1, KEY_R),

[...]

+	KEY(7, 6, KEY_OK),
+	KEY(7, 7, KEY_DOWN),
+};
+
+static struct matrix_keymap_data sdp4430_keymap_data = {
+	.keymap			= sdp4430_keymap,
+	.keymap_size		= ARRAY_SIZE(sdp4430_keymap),
+};
+
+static struct omap4_keypad_platform_data sdp4430_keypad_data = {
+	.keymap_data		= &sdp4430_keymap_data,
+	.rows			= 8,
+	.cols			= 8,
+};
+
+struct omap_device_pm_latency omap_keyboard_latency[] = {
+	{
+		.deactivate_func = omap_device_idle_hwmods,
+		.activate_func   = omap_device_enable_hwmods,
+		.flags = OMAP_DEVICE_LATENCY_AUTO_ADJUST,
+	},
+};
+
+static int omap4_init_keypad(struct omap_hwmod *oh, void *user)
+{
+	struct omap_device *od;
+	unsigned int id = -1;
+	char *name = "omap4-keypad";
+
+	if (!oh)
+		pr_err("Could not look up omap4 kbd\n");
+
+	od = omap_device_build(name, id, oh, &sdp4430_keypad_data,
+			sizeof(struct omap4_keypad_platform_data),
+			omap_keyboard_latency,
+			ARRAY_SIZE(omap_keyboard_latency), 0);
+	WARN(IS_ERR(od), "Could not build omap_device for %s %s\n",
+		name, oh->name);
+
+	return 0;
+}
+
+static int omap_init_keypad(void)
+{
+	if (!cpu_is_omap44xx())
+		return -ENODEV;
+
+	return omap_hwmod_for_each_by_class("kbd", omap4_init_keypad, NULL);
+}
+#endif /* KEYBOARD CONFIG_ARCH_OMAP4 */
+
 #if defined(CONFIG_OMAP_MBOX_FWK) || defined(CONFIG_OMAP_MBOX_FWK_MODULE)

 #define MBOX_REG_SIZE   0x120
@@ -807,6 +931,7 @@ static int __init omap2_init_devices(void)
 	 */
 	omap_hsmmc_reset();
 	omap_init_camera();
+	omap_init_keypad();
 	omap_init_mbox();
 	omap_init_mcspi();
 	omap_hdq_init();

>>> +    pdata->base = oh->_rt_va;
>>> +    pdata->irq = oh->mpu_irqs[0].irq;
>>
>> Use platform_get_() APIs to get base addr & irq instead of passing
>> it as pdata
>
> Yes.
>
> Thanks Charu!
>
> For all those working on OMAP hwmod conversions, please take some time
> to read the reviews of the other hwmod conversions that have already
> been posted and reviewed (some of them multiple times) so we don't
> keep duplicating the same mistakes and wasting review time.
>

These will be the changes....

diff --git a/drivers/input/keyboard/omap4-keypad.c
b/drivers/input/keyboard/omap4-keypad.c
index 975f8bb..c606e36 100644
--- a/drivers/input/keyboard/omap4-keypad.c
+++ b/drivers/input/keyboard/omap4-keypad.c

@@ -158,12 +213,14 @@ static int __devinit omap4_keypad_probe(struct
platform_device *pdev)
 		return -EINVAL;
 	}

-	if (!pdata->base) {
+	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
+	if (!res) {
 		dev_err(&pdev->dev, "no base address specified\n");
 		return -EINVAL;
 	}

-	if (!pdata->irq) {
+	irq = platform_get_irq(pdev, 0);
+	if (!irq) {
 		dev_err(&pdev->dev, "no keyboard irq assigned\n");
 		return -EINVAL;
 	}

@@ -184,9 +240,22 @@ static int __devinit omap4_keypad_probe(struct
platform_device *pdev)
 		return -ENOMEM;
 	}

-	keypad_data->base = pdata->base;
-	keypad_data->irq = pdata->irq;
+	mem = request_mem_region(res->start,
+			resource_size(res), pdev->name);
+	if (!mem) {
+		dev_err(&pdev->dev, "no mem region available\n");
+		return -ENOMEM;
+		goto err_free_keypad;
+	}
+
+	keypad_data->base = ioremap(res->start, resource_size(res));
+	if (!keypad_data->base) {
+		dev_err(&pdev->dev, "can't ioremap mem resource.\n");
+		error = -ENOMEM;
+		goto err_free_memreg;
+	}

+	keypad_data->irq = irq;

Best Regards
Abraham
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux