Re: [PATCH v3 1/2] drivers/base: permit base components to omit the bind/unbind ops

2014-02-10 Thread Russell King - ARM Linux
On Mon, Feb 10, 2014 at 01:53:08PM +0100, Thierry Reding wrote:
 On Fri, Feb 07, 2014 at 04:55:00PM +0100, Jean-Francois Moine wrote:
  Some simple components don't need to do any specific action on
  bind to / unbind from a master component.
  
  This patch permits such components to omit the bind/unbind
  operations.
  
  Signed-off-by: Jean-Francois Moine moin...@free.fr
  ---
   drivers/base/component.c | 9 +++--
   1 file changed, 7 insertions(+), 2 deletions(-)
  
  diff --git a/drivers/base/component.c b/drivers/base/component.c
  index c53efe6..0a39d7a 100644
  --- a/drivers/base/component.c
  +++ b/drivers/base/component.c
  @@ -225,7 +225,8 @@ static void component_unbind(struct component 
  *component,
   {
  WARN_ON(!component-bound);
   
  -   component-ops-unbind(component-dev, master-dev, data);
  +   if (component-ops)
  +   component-ops-unbind(component-dev, master-dev, data);
 
 This doesn't actually do what the commit message says. This makes
 component-ops optional, not component-ops-unbind().
 
 A more correct check would be:
 
   if (component-ops  component-ops-unbind)
 
  component-bound = false;
   
  /* Release all resources claimed in the binding of this component */
  @@ -274,7 +275,11 @@ static int component_bind(struct component *component, 
  struct master *master,
  dev_dbg(master-dev, binding %s (ops %ps)\n,
  dev_name(component-dev), component-ops);
   
  -   ret = component-ops-bind(component-dev, master-dev, data);
  +   if (component-ops)
  +   ret = component-ops-bind(component-dev, master-dev, data);
 
 Same here.

I've NAK'd these patches already - I believe they're based on a
mis-understanding of how this should be used.  I believe Jean-Francois
has only looked at the core, rather than looking at the imx-drm example
it was posted with in an attempt to understand it.

Omitting the component bind operations is absurd because it makes the
component code completely pointless, since there is then no way to
control the sequencing of driver initialisation - something which is
one of the primary reasons for this code existing in the first place.

-- 
FTTC broadband for 0.8mile line: 5.8Mbps down 500kbps up.  Estimation
in database were 13.1 to 19Mbit for a good line, about 7.5+ for a bad.
Estimate before purchase was up to 13.2Mbit.
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH v3 1/2] drivers/base: permit base components to omit the bind/unbind ops

2014-02-10 Thread Jean-Francois Moine
On Mon, 10 Feb 2014 13:12:33 +
Russell King - ARM Linux li...@arm.linux.org.uk wrote:

 I've NAK'd these patches already - I believe they're based on a
 mis-understanding of how this should be used.  I believe Jean-Francois
 has only looked at the core, rather than looking at the imx-drm example
 it was posted with in an attempt to understand it.
 
 Omitting the component bind operations is absurd because it makes the
 component code completely pointless, since there is then no way to
 control the sequencing of driver initialisation - something which is
 one of the primary reasons for this code existing in the first place.

I perfectly looked at your example and I use it now in my system.

You did not see what could be done with your component code. For
example, since november, I have not yet the clock probe_defer in the
mainline (http://www.spinics.net/lists/arm-kernel/msg306072.html), so,
there are 3 solutions:

- hope the patch will be some day in the mainline and, today, reboot
  when the system does not start correctly,

- insert a delay in the tda998x and kirkwood probe sequences (delay
  long enough to be sure the si5351 is started, or loop),

- use your component work.

In the last case, it is easy:

- the si5351 driver calls component_add (with empty ops: it has no
  interest in the bind/unbind functions) when it is fully started (i.e.
  registered - that was the subject of my patch),

- in the DRM driver, look for the si5351 as a clock in the DT (drm -
  encoder - clock), and add it to the awaited components (CRTCs,
  encoders..),

- in the audio subsystem, look for the si5351 as an external clock in
  the DT (simple-card - CPU DAI - clock) and add it to the awaited
  components (CPU and CODEC DAIs - yes, the S/PDIF CODEC should also be
  a component with no bin/unbind ops).

Then, when the si5351 is registered, both master components video and
audio can safely run.


-- 
Ken ar c'hentaƱ | ** Breizh ha Linux atav! **
Jef |   http://moinejf.free.fr/
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel


Re: [PATCH v3 1/2] drivers/base: permit base components to omit the bind/unbind ops

2014-02-10 Thread Russell King - ARM Linux
On Mon, Feb 10, 2014 at 03:35:51PM +0100, Jean-Francois Moine wrote:
 On Mon, 10 Feb 2014 13:12:33 +
 Russell King - ARM Linux li...@arm.linux.org.uk wrote:
 
  I've NAK'd these patches already - I believe they're based on a
  mis-understanding of how this should be used.  I believe Jean-Francois
  has only looked at the core, rather than looking at the imx-drm example
  it was posted with in an attempt to understand it.
  
  Omitting the component bind operations is absurd because it makes the
  component code completely pointless, since there is then no way to
  control the sequencing of driver initialisation - something which is
  one of the primary reasons for this code existing in the first place.
 
 I perfectly looked at your example and I use it now in my system.
 
 You did not see what could be done with your component code. For
 example, since november, I have not yet the clock probe_defer in the
 mainline (http://www.spinics.net/lists/arm-kernel/msg306072.html), so,
 there are 3 solutions:
 
 - hope the patch will be some day in the mainline and, today, reboot
   when the system does not start correctly,
 
 - insert a delay in the tda998x and kirkwood probe sequences (delay
   long enough to be sure the si5351 is started, or loop),
 
 - use your component work.
 
 In the last case, it is easy:
 
 - the si5351 driver calls component_add (with empty ops: it has no
   interest in the bind/unbind functions) when it is fully started (i.e.
   registered - that was the subject of my patch),

There is only one word for this:
Ewww.

Definitely not.

The component stuff is there to sort out the subsystems which expect a
card but in DT we supply a set of components.  It's not there to sort
out dependencies between different subsystems.

I've no idea why your patch to add the deferred probing hasn't been acked
by Mike yet, but that needs to happen before I take it.  Or, split it up
in two so I can take the clkdev part and Mike can take the CCF part.

-- 
FTTC broadband for 0.8mile line: 5.8Mbps down 500kbps up.  Estimation
in database were 13.1 to 19Mbit for a good line, about 7.5+ for a bad.
Estimate before purchase was up to 13.2Mbit.
___
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel