pps: access pps device by direct pointer

Using device index as a pointer needs some unnecessary work to be done
every time the pointer is needed (in irq handler for example).  Using a
direct pointer is much more easy (and safe as well).

Signed-off-by: Alexander Gordeev <lasaine@lvk.cs.msu.su>
Acked-by: Rodolfo Giometti <giometti@linux.it>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Alexander Gordeev
2011-01-12 17:00:51 -08:00
committed by Linus Torvalds
parent 6f4229b511
commit 5e196d34a7
5 changed files with 85 additions and 161 deletions

View File

@@ -31,13 +31,16 @@
* Global defines
*/
struct pps_device;
/* The specific PPS source info */
struct pps_source_info {
char name[PPS_MAX_NAME_LEN]; /* simbolic name */
char path[PPS_MAX_NAME_LEN]; /* path of connected device */
int mode; /* PPS's allowed mode */
void (*echo)(int source, int event, void *data); /* PPS echo function */
void (*echo)(struct pps_device *pps,
int event, void *data); /* PPS echo function */
struct module *owner;
struct device *dev;
@@ -65,35 +68,27 @@ struct pps_device {
unsigned int id; /* PPS source unique ID */
struct cdev cdev;
struct device *dev;
int devno;
struct fasync_struct *async_queue; /* fasync method */
spinlock_t lock;
atomic_t usage; /* usage count */
};
/*
* Global variables
*/
extern spinlock_t pps_idr_lock;
extern struct idr pps_idr;
extern struct device_attribute pps_attrs[];
/*
* Exported functions
*/
struct pps_device *pps_get_source(int source);
extern void pps_put_source(struct pps_device *pps);
extern int pps_register_source(struct pps_source_info *info,
int default_params);
extern void pps_unregister_source(int source);
extern struct pps_device *pps_register_source(
struct pps_source_info *info, int default_params);
extern void pps_unregister_source(struct pps_device *pps);
extern int pps_register_cdev(struct pps_device *pps);
extern void pps_unregister_cdev(struct pps_device *pps);
extern void pps_event(int source, struct pps_event_time *ts, int event,
void *data);
extern void pps_event(struct pps_device *pps,
struct pps_event_time *ts, int event, void *data);
static inline void timespec_to_pps_ktime(struct pps_ktime *kt,
struct timespec ts)