Re: [PATCH v3 1/5] sc_phy:SmartCard(SC) PHY interface to SC controller

2014-05-29 Thread Satish Patel



On 5/29/2014 12:23 AM, Greg KH wrote:

On Wed, May 28, 2014 at 02:27:13PM +0530, Satish Patel wrote:

SmartCard controller uses this interface to communicate with
SmartCard via PHY

Some SmartCard PHY has multiple slots for cards.
This inerface also enables controller to communicate
with one or more SmartCard connected over phy.

interface structure includes following APIs
- set/get config
- activate/deactivate smart card
- warm reset
- register_notify (for card insert/remove/overheat)
- unregister_notify

Signed-off-by: Satish Patel satish.pa...@ti.com
---
  Documentation/sc_phy.txt |  171 ++
  include/linux/sc_phy.h   |  136 
  2 files changed, 307 insertions(+)
  create mode 100644 Documentation/sc_phy.txt
  create mode 100644 include/linux/sc_phy.h


These are .h files, but where is the api functions that use
these structures defined at?

This is like template/wrappers, smart card phy driver will write API 
functions. And smartcard controller will call these functions.
With proposed approach, smartcard controller can communicate with any 
smart card phy (TI/NxP) without change in code. Using DT entry smartcard 
and PHY will gets connected with each other.

Refer diagram given @Documentation/sc_phy.txt.



confused,

greg k-h


--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v3 1/5] sc_phy:SmartCard(SC) PHY interface to SC controller

2014-05-29 Thread Satish Patel



On 5/29/2014 12:14 AM, Greg KH wrote:

On Wed, May 28, 2014 at 02:27:13PM +0530, Satish Patel wrote:

+/**
+ * struct sc_phy - The basic smart card phy structure
+ *
+ * @dev: phy device
+ * @pdata: pointer to phy's private data structure
+ * @set_config: called to set phy's configuration
+ * @get_config: called to get phy's configuration
+ * @activate_card: perform smart card activation
+ * @deactivate_card: perform smart card de-activation
+ * @warm_reset: execute smart card warm reset sequence
+ * @register_card_activity_cb: register call back to phy device.
+ * This call back will be called on card insert or remove event
+ *
+ * smart card controller uses this interface to communicate with
+ * smart card via phy.Some smart card phy has multiple slots for
+ * cards. This inerface also enables controller to communicate with
+ * one or more smart card connected over phy.
+ */
+struct sc_phy {
+   /* phy's device pointer */
+   struct device *dev;


So this is the parent, right?  Why not embed a struct device into this
structure as well, further streaching out the device tree.


Do you mean to use dev-p for pdata ?
I have kept it outside, to give easeness/pragmatic focal for new phy 
driver development. Driver can make this pointer null and use above pointer.

+
+   /* phy's private data */
+   void *pdata;


If you do the above, then this pointer is not needed.



+
+   /* notify data, passed by interface user as a part of
+* register_notify API. Data should be passed back when
+* notification raised to the interface user
+*/
+   void *notify_data;


What makes this different from the pdata?
pdata is phy's private data, while notify_data is something phy will 
send to smart card controller on some event, like card 
remove/insert/timeout etc..




+
+   int (*set_config)(struct sc_phy *phy, u8 slot,
+   enum sc_phy_config attr, int value);
+   int (*get_config)(struct sc_phy *phy, u8 slot, enum
+   sc_phy_config attr);
+   int (*activate_card)(struct sc_phy *phy, u8 slot);
+   int (*deactivate_card)(struct sc_phy *phy, u8 slot);
+   int (*get_syncatr)(struct sc_phy *phy, u8 slot, u8 len, char *atr);
+   int (*warm_reset)(struct sc_phy *phy, u8 slot);
+   int (*register_notify)(struct sc_phy *phy,
+struct notifier_block *nb, void *notify_data);
+   int (*unregister_notify)(struct sc_phy *phy,
+   struct  notifier_block *nb);
+};
+
+#endif /* __SC_PHY_H__ */
--
1.7.9.5

--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v3 1/5] sc_phy:SmartCard(SC) PHY interface to SC controller

2014-05-29 Thread Rob Herring
On Thu, May 29, 2014 at 3:34 AM, Satish Patel satish.pa...@ti.com wrote:


 On 5/29/2014 12:23 AM, Greg KH wrote:

 On Wed, May 28, 2014 at 02:27:13PM +0530, Satish Patel wrote:

 SmartCard controller uses this interface to communicate with
 SmartCard via PHY

 Some SmartCard PHY has multiple slots for cards.
 This inerface also enables controller to communicate
 with one or more SmartCard connected over phy.

 interface structure includes following APIs
 - set/get config
 - activate/deactivate smart card
 - warm reset
 - register_notify (for card insert/remove/overheat)
 - unregister_notify

 Signed-off-by: Satish Patel satish.pa...@ti.com
 ---
   Documentation/sc_phy.txt |  171
 ++
   include/linux/sc_phy.h   |  136 
   2 files changed, 307 insertions(+)
   create mode 100644 Documentation/sc_phy.txt
   create mode 100644 include/linux/sc_phy.h


 These are .h files, but where is the api functions that use
 these structures defined at?

 This is like template/wrappers, smart card phy driver will write API
 functions. And smartcard controller will call these functions.
 With proposed approach, smartcard controller can communicate with any smart
 card phy (TI/NxP) without change in code. Using DT entry smartcard and PHY
 will gets connected with each other.
 Refer diagram given @Documentation/sc_phy.txt.


 confused,

I believe the api Greg is wondering about is the notifier which as I
commented is not a good design.

There is now a phy subsystem. I don't know if it has what you need,
but you should look at it to determine if it will work or could be
extended to work.

Rob
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v3 1/5] sc_phy:SmartCard(SC) PHY interface to SC controller

2014-05-29 Thread Greg KH
On Thu, May 29, 2014 at 02:26:55PM +0530, Satish Patel wrote:
 
 
 On 5/29/2014 12:14 AM, Greg KH wrote:
 On Wed, May 28, 2014 at 02:27:13PM +0530, Satish Patel wrote:
 +/**
 + * struct sc_phy - The basic smart card phy structure
 + *
 + * @dev: phy device
 + * @pdata: pointer to phy's private data structure
 + * @set_config: called to set phy's configuration
 + * @get_config: called to get phy's configuration
 + * @activate_card: perform smart card activation
 + * @deactivate_card: perform smart card de-activation
 + * @warm_reset: execute smart card warm reset sequence
 + * @register_card_activity_cb: register call back to phy device.
 + * This call back will be called on card insert or remove event
 + *
 + * smart card controller uses this interface to communicate with
 + * smart card via phy.Some smart card phy has multiple slots for
 + * cards. This inerface also enables controller to communicate with
 + * one or more smart card connected over phy.
 + */
 +struct sc_phy {
 +   /* phy's device pointer */
 +   struct device *dev;
 
 So this is the parent, right?  Why not embed a struct device into this
 structure as well, further streaching out the device tree.
 
 Do you mean to use dev-p for pdata ?

No, use the device itself.

 I have kept it outside, to give easeness/pragmatic focal for new phy driver
 development. Driver can make this pointer null and use above pointer.

Ick, no, that's not how the driver model works.  Each device in the
system needs a struct device, don't try to chain off of an existing
device like this.  Make it a real one.

 +
 +   /* phy's private data */
 +   void *pdata;
 
 If you do the above, then this pointer is not needed.
 
 
 +
 +   /* notify data, passed by interface user as a part of
 +* register_notify API. Data should be passed back when
 +* notification raised to the interface user
 +*/
 +   void *notify_data;
 
 What makes this different from the pdata?
 pdata is phy's private data, while notify_data is something phy will send to
 smart card controller on some event, like card remove/insert/timeout etc..

That doesn't make much sense to me, why not just put that in the notify
function callback itself?

Please either use the existing phy layer of the kernel, or make a real
subsystem here, don't try to put a tiny shim on top of an existing
struct device for this driver, that's not how subsystems in Linux are
done.

thanks,

greg k-h
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v3 1/5] sc_phy:SmartCard(SC) PHY interface to SC controller

2014-05-29 Thread Greg KH
On Thu, May 29, 2014 at 08:47:31AM -0500, Rob Herring wrote:
 On Thu, May 29, 2014 at 3:34 AM, Satish Patel satish.pa...@ti.com wrote:
 
 
  On 5/29/2014 12:23 AM, Greg KH wrote:
 
  On Wed, May 28, 2014 at 02:27:13PM +0530, Satish Patel wrote:
 
  SmartCard controller uses this interface to communicate with
  SmartCard via PHY
 
  Some SmartCard PHY has multiple slots for cards.
  This inerface also enables controller to communicate
  with one or more SmartCard connected over phy.
 
  interface structure includes following APIs
  - set/get config
  - activate/deactivate smart card
  - warm reset
  - register_notify (for card insert/remove/overheat)
  - unregister_notify
 
  Signed-off-by: Satish Patel satish.pa...@ti.com
  ---
Documentation/sc_phy.txt |  171
  ++
include/linux/sc_phy.h   |  136 
2 files changed, 307 insertions(+)
create mode 100644 Documentation/sc_phy.txt
create mode 100644 include/linux/sc_phy.h
 
 
  These are .h files, but where is the api functions that use
  these structures defined at?
 
  This is like template/wrappers, smart card phy driver will write API
  functions. And smartcard controller will call these functions.
  With proposed approach, smartcard controller can communicate with any smart
  card phy (TI/NxP) without change in code. Using DT entry smartcard and PHY
  will gets connected with each other.
  Refer diagram given @Documentation/sc_phy.txt.
 
 
  confused,
 
 I believe the api Greg is wondering about is the notifier which as I
 commented is not a good design.

That, and the fact that if this really is an api, there are no .c
files for it like a normal api is in the kernel.

 There is now a phy subsystem. I don't know if it has what you need,
 but you should look at it to determine if it will work or could be
 extended to work.

I agree.  Satish, what's wrong with our existing phy layer?

greg k-h
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v3 1/5] sc_phy:SmartCard(SC) PHY interface to SC controller

2014-05-29 Thread Satish Patel



On 5/29/2014 7:17 PM, Rob Herring wrote:

On Thu, May 29, 2014 at 3:34 AM, Satish Patel satish.pa...@ti.com wrote:



On 5/29/2014 12:23 AM, Greg KH wrote:


On Wed, May 28, 2014 at 02:27:13PM +0530, Satish Patel wrote:


SmartCard controller uses this interface to communicate with
SmartCard via PHY

Some SmartCard PHY has multiple slots for cards.
This inerface also enables controller to communicate
with one or more SmartCard connected over phy.

interface structure includes following APIs
- set/get config
- activate/deactivate smart card
- warm reset
- register_notify (for card insert/remove/overheat)
- unregister_notify

Signed-off-by: Satish Patel satish.pa...@ti.com
---
   Documentation/sc_phy.txt |  171
++
   include/linux/sc_phy.h   |  136 
   2 files changed, 307 insertions(+)
   create mode 100644 Documentation/sc_phy.txt
   create mode 100644 include/linux/sc_phy.h



These are .h files, but where is the api functions that use
these structures defined at?


This is like template/wrappers, smart card phy driver will write API
functions. And smartcard controller will call these functions.
With proposed approach, smartcard controller can communicate with any smart
card phy (TI/NxP) without change in code. Using DT entry smartcard and PHY
will gets connected with each other.
Refer diagram given @Documentation/sc_phy.txt.



confused,


I believe the api Greg is wondering about is the notifier which as I
commented is not a good design.

There is now a phy subsystem. I don't know if it has what you need,
but you should look at it to determine if it will work or could be
extended to work.

I have given my comments on notifier, it is required to notify real time 
events like card insert/remove to the smart card controller. As this 
interrupts tied to phy (in case phy is present) not with controller.


Existing phy subsystem does not support generic operations for the phy. 
If at all it adds supports for these, in future I am ok to get align 
with it.



Rob


--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v3 1/5] sc_phy:SmartCard(SC) PHY interface to SC controller

2014-05-29 Thread Satish Patel



On 5/29/2014 9:21 PM, Greg KH wrote:

On Thu, May 29, 2014 at 02:26:55PM +0530, Satish Patel wrote:



On 5/29/2014 12:14 AM, Greg KH wrote:

On Wed, May 28, 2014 at 02:27:13PM +0530, Satish Patel wrote:

+/**
+ * struct sc_phy - The basic smart card phy structure
+ *
+ * @dev: phy device
+ * @pdata: pointer to phy's private data structure
+ * @set_config: called to set phy's configuration
+ * @get_config: called to get phy's configuration
+ * @activate_card: perform smart card activation
+ * @deactivate_card: perform smart card de-activation
+ * @warm_reset: execute smart card warm reset sequence
+ * @register_card_activity_cb: register call back to phy device.
+ * This call back will be called on card insert or remove event
+ *
+ * smart card controller uses this interface to communicate with
+ * smart card via phy.Some smart card phy has multiple slots for
+ * cards. This inerface also enables controller to communicate with
+ * one or more smart card connected over phy.
+ */
+struct sc_phy {
+   /* phy's device pointer */
+   struct device *dev;


So this is the parent, right?  Why not embed a struct device into this
structure as well, further streaching out the device tree.


Do you mean to use dev-p for pdata ?


No, use the device itself.


I have kept it outside, to give easeness/pragmatic focal for new phy driver
development. Driver can make this pointer null and use above pointer.


Ick, no, that's not how the driver model works.  Each device in the
system needs a struct device, don't try to chain off of an existing
device like this.  Make it a real one.


+
+   /* phy's private data */
+   void *pdata;


If you do the above, then this pointer is not needed.



+
+   /* notify data, passed by interface user as a part of
+* register_notify API. Data should be passed back when
+* notification raised to the interface user
+*/
+   void *notify_data;


What makes this different from the pdata?

pdata is phy's private data, while notify_data is something phy will send to
smart card controller on some event, like card remove/insert/timeout etc..


That doesn't make much sense to me, why not just put that in the notify
function callback itself?


Little correction over here..
Here is brief flow
USIM(Smart Card Controller) register notification callback to smarcard phy.

usim-phy-register_notify(phy handle, callback fn, notify_data);
notify_data : pass back when callback function will be called by PHY


Smartcard PHY - USIM
blocking_notifier_call_chain(notifier, action, notify_data);

action : card insert/remove/overheat etc..
notify data: USIM data passing back (supplied at the time of cb 
registration)




Please either use the existing phy layer of the kernel, or make a real
subsystem here, don't try to put a tiny shim on top of an existing
struct device for this driver, that's not how subsystems in Linux are
done.

Why I am not using exiting PHY framework ?

We will be more than happy to adapt generic phy if it
includes/add support for smart card requirements like

1) Some smart card phy (TDA8026-NxP) has multiple slots for smart
cards. This interface enables controller to communicate with specific
smart card inserted to the specific phy's slot.
2) Warm reset to smart card inserted to phy slot.
3) Bit banging of smart card pins to support vendor specific memory
cards.
4) Notification of card insert/remove/overheat etc.
5) synchronous and asynchronous modes for smart card transaction




thanks,

greg k-h


--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v3 1/5] sc_phy:SmartCard(SC) PHY interface to SC controller

2014-05-28 Thread Greg KH
On Wed, May 28, 2014 at 02:27:13PM +0530, Satish Patel wrote:
 +/**
 + * struct sc_phy - The basic smart card phy structure
 + *
 + * @dev: phy device
 + * @pdata: pointer to phy's private data structure
 + * @set_config: called to set phy's configuration
 + * @get_config: called to get phy's configuration
 + * @activate_card: perform smart card activation
 + * @deactivate_card: perform smart card de-activation
 + * @warm_reset: execute smart card warm reset sequence
 + * @register_card_activity_cb: register call back to phy device.
 + * This call back will be called on card insert or remove event
 + *
 + * smart card controller uses this interface to communicate with
 + * smart card via phy.Some smart card phy has multiple slots for
 + * cards. This inerface also enables controller to communicate with
 + * one or more smart card connected over phy.
 + */
 +struct sc_phy {
 + /* phy's device pointer */
 + struct device *dev;

So this is the parent, right?  Why not embed a struct device into this
structure as well, further streaching out the device tree.

 +
 + /* phy's private data */
 + void *pdata;

If you do the above, then this pointer is not needed.


 +
 + /* notify data, passed by interface user as a part of
 +  * register_notify API. Data should be passed back when
 +  * notification raised to the interface user
 +  */
 + void *notify_data;

What makes this different from the pdata?


 +
 + int (*set_config)(struct sc_phy *phy, u8 slot,
 + enum sc_phy_config attr, int value);
 + int (*get_config)(struct sc_phy *phy, u8 slot, enum
 + sc_phy_config attr);
 + int (*activate_card)(struct sc_phy *phy, u8 slot);
 + int (*deactivate_card)(struct sc_phy *phy, u8 slot);
 + int (*get_syncatr)(struct sc_phy *phy, u8 slot, u8 len, char *atr);
 + int (*warm_reset)(struct sc_phy *phy, u8 slot);
 + int (*register_notify)(struct sc_phy *phy,
 +  struct notifier_block *nb, void *notify_data);
 + int (*unregister_notify)(struct sc_phy *phy,
 + struct  notifier_block *nb);
 +};
 +
 +#endif /* __SC_PHY_H__ */
 -- 
 1.7.9.5
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH v3 1/5] sc_phy:SmartCard(SC) PHY interface to SC controller

2014-05-28 Thread Greg KH
On Wed, May 28, 2014 at 02:27:13PM +0530, Satish Patel wrote:
 SmartCard controller uses this interface to communicate with
 SmartCard via PHY
 
 Some SmartCard PHY has multiple slots for cards.
 This inerface also enables controller to communicate
 with one or more SmartCard connected over phy.
 
 interface structure includes following APIs
 - set/get config
 - activate/deactivate smart card
 - warm reset
 - register_notify (for card insert/remove/overheat)
 - unregister_notify
 
 Signed-off-by: Satish Patel satish.pa...@ti.com
 ---
  Documentation/sc_phy.txt |  171 
 ++
  include/linux/sc_phy.h   |  136 
  2 files changed, 307 insertions(+)
  create mode 100644 Documentation/sc_phy.txt
  create mode 100644 include/linux/sc_phy.h

These are .h files, but where is the api functions that use
these structures defined at?

confused,

greg k-h
--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html