Thread (19 messages) 19 messages, 3 authors, 2014-09-16

Re: [PATCH v2 1/7] mfd: Add support for DA9150 combined charger & fuel-gauge device

From: Lee Jones <hidden>
Date: 2014-09-15 22:39:37
Also in: linux-iio, linux-pm, lkml

On Wed, 10 Sep 2014, Opensource [Adam Thomson] wrote:
On September 10, 2014 10:50, Lee Jones wrote:
quoted
On Tue, 09 Sep 2014, Opensource [Adam Thomson] wrote:
quoted
On August 28, 2014 17:36, Lee Jones wrote:

Thanks for the feedback. As a general comment a couple of the items you've
identified relate to future updates (additional functionality being added).
I already have code in place for this but have stripped out a couple of the
drivers just to reduce the churn and size of patch submission. These will be
added once these patches have been accepted.

Where this is the case, I have added notes in-line against the relevant
comments you made.
quoted
On Thu, 28 Aug 2014, Adam Thomson wrote:
quoted
DA9150 is a combined Charger and Fuel-Gauge IC, with additional
GPIO and GPADC functionality.

Signed-off-by: Adam Thomson <redacted>
---
 drivers/mfd/Kconfig                  |   12 +
 drivers/mfd/Makefile                 |    2 +
 drivers/mfd/da9150-core.c            |  332 ++++++++++
 drivers/mfd/da9150-i2c.c             |  176 ++++++
[...]
quoted
quoted
quoted
quoted
+/* Helper functions for sub-devices to request/free IRQs */
+int da9150_register_irq(struct platform_device *pdev, void *dev_id,
+			irq_handler_t handler, const char *name)
+{
+	int irq, ret;
+
+	irq = platform_get_irq_byname(pdev, name);
+	if (irq < 0)
+		return irq;
+
+	ret = devm_request_threaded_irq(&pdev->dev, irq, NULL, handler,
+					IRQF_ONESHOT, name, dev_id);
+	if (ret)
+		dev_err(&pdev->dev, "Failed to request IRQ %d: %d\n", irq, ret);
+
+	return ret;
+}
+EXPORT_SYMBOL_GPL(da9150_register_irq);
Why do they need help?  What problem does adding these layers solve?
Means I don't have to keep adding print error lines everywhere else if this
function takes care of it. Thought that would be cleaner.
You only need to request each IRQ once.  It's just more abstraction
for the sake of it.  I would prefer if you removed them.
Yes, but in the charger driver for example, there are 4 IRQs to request. If
I don't use this approach the IRQ requesting becomes bloated, hence why I went
for a common function like this. Thought generally the intention was to cut
down on repeated code?
If you're worried about bloat in .probe() it's okay to define a new
function within the charger driver; however, creating a call-back into
the MFD driver like this I think it over-kill for 4 requests.
quoted
quoted
quoted
quoted
+void da9150_release_irq(struct platform_device *pdev, void *dev_id,
+		       const char *name)
+{
+	int irq;
+
+	irq = platform_get_irq_byname(pdev, name);
+	if (irq < 0)
+		return;
+
+	devm_free_irq(&pdev->dev, irq, dev_id);
+}
+EXPORT_SYMBOL_GPL(da9150_release_irq);
Do you ever release the IRQ and not unbind the driver?

Are there ordering issues at play here?

If not, there's no need to conduct a manual free.
In the charger driver, in the remove function there is a need I believe to
free the IRQs before other items are cleared up (e.g. power_supply classes),
so this is why I have added this in here.
Can you handle this separately in the Charger driver then please?

[...]
If I have to remove the IRQ register function, then yes, otherwise it makes more
sense to have the pair of functions in the MFD core I would say.
I would prefer you to remove the call-back please.
quoted
quoted
quoted
quoted
+	if (pdata)
+		da9150->irq_base = pdata->irq_base;
+	else
+		da9150->irq_base = -1;
pdata ? pdata->irq_base : -1;
This is left this way as later updates to add additional functionality will
require addtional work to be done with the platform data. Seemed pointless
changing it here just to change it back later.
You're not changing anything, as this is the introduction of the code.
I can't tell you how many times I've heard "I will change it later",
or "doing it this way will support subsequent submissions", then
received no more patches.  It's okay to do it nicely now and expand
it back out in the new patches.

[...]
It appears that way to you but I have to modify my code for sumbission as the
local code I have covers all functionality. Am having to refactor again and
again just to suit this initial submission, and then I have to revert it back
again when submitting the last couple of drivers. Time consuming, and quite
frustrating when the intention was to make the whole process easier. Anyway,
will update for now and revert in subsequent patches.
I sincerely hope the refactorings won't add too much effort, but it's
difficult to have one rule for the masses and different ones for
others.

-- 
Lee Jones
Linaro STMicroelectronics Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help