Thread (18 messages) flat view 18 messages, 6 authors, 2011-02-10

Re: [RFC v2 PATCH 7/7] input: misc: Add support for PM8058 based vibrator driver

From: Trilok Soni <hidden>
Date: 2011-02-02 08:54:18
Also in: linux-arm-msm, lkml

Hi Dmitry,

On 2/2/2011 2:03 PM, Dmitry Torokhov wrote:
Hi Anirudh,

On Tue, Feb 01, 2011 at 07:17:43PM +0530, Anirudh Ghayal wrote:
quoted
+
+#include <linux/mfd/pmic8058.h>
+#include <linux/input/pmic8058-vibrator.h>
Where is this header file? Shouldn't it be part of this patch?
Looks like someone forgot "git add" on it. We will fix this in v3.
quoted
+
+#define VIB_DRV			0x4A
+
+#define VIB_DRV_SEL_MASK	0xf8
+#define VIB_DRV_SEL_SHIFT	0x03
+#define VIB_DRV_EN_MANUAL_MASK	0xfc
+
+#define VIB_MAX_LEVEL_mV	(3100)
+#define VIB_MIN_LEVEL_mV	(1200)
+#define VIB_MAX_LEVELS		(VIB_MAX_LEVEL_mV - VIB_MIN_LEVEL_mV)
+
+#define MAX_FF_SPEED		0xff
+
+/*
+ * struct pmic8058_vib - structure to hold vibrator data
+ * vib_input_dev: input device supporting force feedback
+ * work: work structure to set the vibration parameters
+ * dev: device supporting force feedback
+ * pdata: platform data
+ * pm_chip: reference to pmic chip to carry out read/write operations
+ * speed: speed of vibration set from userland
+ * state: state of vibrator
+ * level: level of vibration to set in the chip
+ * reg_vib_drv: VIB_DRV register value
Hmm, this is kind of kerneldoc but not quite (kerneldoc's arguments
start with '@').
Ack. It will be fixed.
quoted
+
+static int __devinit pmic8058_vib_probe(struct platform_device *pdev)
+
+{
+	struct pm8058_chip *pm_chip;
+	struct pmic8058_vib *vib;
+	const struct pmic8058_vibrator_pdata *pdata = pdev->dev.platform_data;
+	int rc;
+	u8 val;
+
+	pm_chip = platform_get_drvdata(pdev);
The parent should not abuse platform data of _this_ device, it belongs
to this driver. In fact you overwrite it with pmic8058_vib below, which
means that you can't unbind the driver and bind it again.

Please find other way to pass pm_chip.
This will be fixed through pmic8058 core driver, when we submit. We are aware of it,
and the all the sub-device driver will be changed to do it properly once we release
them again with pmic core driver submission.
quoted
+
+	platform_set_drvdata(pdev, vib);
+
+	rc = input_register_device(vib->vib_input_dev);
+	if (rc < 0) {
+		dev_dbg(&pdev->dev, "couldn't register input device\n");
+		goto err_reg_input_dev;
+	}
platform_set_drvdata(pdev, vib) should go here so you do not need to
clean it if input_register_device() fails.
Ack
quoted
+
+static int __devexit pmic8058_vib_remove(struct platform_device *pdev)
+{
+	struct pmic8058_vib *vib = platform_get_drvdata(pdev);
+
+	cancel_work_sync(&vib->work);
+	if (vib->state)
+		pmic8058_vib_set(vib, 0);
This should probably be part of pmic8058_vib_close() method.
Ok. We will check and fix.
quoted
+
+	input_unregister_device(vib->vib_input_dev);
+	kfree(vib);
Need to call platform_set_drvdata(pdev, NULL);
Ack.
What about PM? Do you need to shut off vibration if device goes to sleep?
Yes. Let me check and add it to v3 patch series.

I will drop the PMIC8058 OTHC from v3 series, as Mark suggested to explore ASoC way of 
doing it.

---Trilok Soni

-- 
Sent by a consultant of the Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help