1
0
Fork 0

usb: phy: Pass OTG FSM pointer to callback functions

struct otg_fsm may be embedded to device's context structure.
The callbacks may require pointer to struct otg_fsm to obtain
necessary data for its operation (example: regulator reference
for drv_vbus()).

Signed-off-by: Anton Tikhomirov <av.tikhomirov@samsung.com>
Signed-off-by: Felipe Balbi <balbi@ti.com>
hifive-unleashed-5.1
Anton Tikhomirov 2013-10-03 12:42:04 +09:00 committed by Felipe Balbi
parent f8cffc84a2
commit da8cc16724
3 changed files with 31 additions and 31 deletions

View File

@ -134,7 +134,7 @@ int write_ulpi(u8 addr, u8 data)
/* Operations that will be called from OTG Finite State Machine */ /* Operations that will be called from OTG Finite State Machine */
/* Charge vbus for vbus pulsing in SRP */ /* Charge vbus for vbus pulsing in SRP */
void fsl_otg_chrg_vbus(int on) void fsl_otg_chrg_vbus(struct otg_fsm *fsm, int on)
{ {
u32 tmp; u32 tmp;
@ -170,7 +170,7 @@ void fsl_otg_dischrg_vbus(int on)
} }
/* A-device driver vbus, controlled through PP bit in PORTSC */ /* A-device driver vbus, controlled through PP bit in PORTSC */
void fsl_otg_drv_vbus(int on) void fsl_otg_drv_vbus(struct otg_fsm *fsm, int on)
{ {
u32 tmp; u32 tmp;
@ -188,7 +188,7 @@ void fsl_otg_drv_vbus(int on)
* Pull-up D+, signalling connect by periperal. Also used in * Pull-up D+, signalling connect by periperal. Also used in
* data-line pulsing in SRP * data-line pulsing in SRP
*/ */
void fsl_otg_loc_conn(int on) void fsl_otg_loc_conn(struct otg_fsm *fsm, int on)
{ {
u32 tmp; u32 tmp;
@ -207,7 +207,7 @@ void fsl_otg_loc_conn(int on)
* port. In host mode, controller will automatically send SOF. * port. In host mode, controller will automatically send SOF.
* Suspend will block the data on the port. * Suspend will block the data on the port.
*/ */
void fsl_otg_loc_sof(int on) void fsl_otg_loc_sof(struct otg_fsm *fsm, int on)
{ {
u32 tmp; u32 tmp;
@ -222,7 +222,7 @@ void fsl_otg_loc_sof(int on)
} }
/* Start SRP pulsing by data-line pulsing, followed with v-bus pulsing. */ /* Start SRP pulsing by data-line pulsing, followed with v-bus pulsing. */
void fsl_otg_start_pulse(void) void fsl_otg_start_pulse(struct otg_fsm *fsm)
{ {
u32 tmp; u32 tmp;
@ -235,7 +235,7 @@ void fsl_otg_start_pulse(void)
fsl_otg_loc_conn(1); fsl_otg_loc_conn(1);
#endif #endif
fsl_otg_add_timer(b_data_pulse_tmr); fsl_otg_add_timer(fsm, b_data_pulse_tmr);
} }
void b_data_pulse_end(unsigned long foo) void b_data_pulse_end(unsigned long foo)
@ -252,14 +252,14 @@ void b_data_pulse_end(unsigned long foo)
void fsl_otg_pulse_vbus(void) void fsl_otg_pulse_vbus(void)
{ {
srp_wait_done = 0; srp_wait_done = 0;
fsl_otg_chrg_vbus(1); fsl_otg_chrg_vbus(&fsl_otg_dev->fsm, 1);
/* start the timer to end vbus charge */ /* start the timer to end vbus charge */
fsl_otg_add_timer(b_vbus_pulse_tmr); fsl_otg_add_timer(&fsl_otg_dev->fsm, b_vbus_pulse_tmr);
} }
void b_vbus_pulse_end(unsigned long foo) void b_vbus_pulse_end(unsigned long foo)
{ {
fsl_otg_chrg_vbus(0); fsl_otg_chrg_vbus(&fsl_otg_dev->fsm, 0);
/* /*
* As USB3300 using the same a_sess_vld and b_sess_vld voltage * As USB3300 using the same a_sess_vld and b_sess_vld voltage
@ -267,7 +267,7 @@ void b_vbus_pulse_end(unsigned long foo)
* residual voltage of vbus pulsing and A device pull up * residual voltage of vbus pulsing and A device pull up
*/ */
fsl_otg_dischrg_vbus(1); fsl_otg_dischrg_vbus(1);
fsl_otg_add_timer(b_srp_wait_tmr); fsl_otg_add_timer(&fsl_otg_dev->fsm, b_srp_wait_tmr);
} }
void b_srp_end(unsigned long foo) void b_srp_end(unsigned long foo)
@ -289,7 +289,7 @@ void a_wait_enum(unsigned long foo)
{ {
VDBG("a_wait_enum timeout\n"); VDBG("a_wait_enum timeout\n");
if (!fsl_otg_dev->phy.otg->host->b_hnp_enable) if (!fsl_otg_dev->phy.otg->host->b_hnp_enable)
fsl_otg_add_timer(a_wait_enum_tmr); fsl_otg_add_timer(&fsl_otg_dev->fsm, a_wait_enum_tmr);
else else
otg_statemachine(&fsl_otg_dev->fsm); otg_statemachine(&fsl_otg_dev->fsm);
} }
@ -376,7 +376,7 @@ void fsl_otg_uninit_timers(void)
} }
/* Add timer to timer list */ /* Add timer to timer list */
void fsl_otg_add_timer(void *gtimer) void fsl_otg_add_timer(struct otg_fsm *fsm, void *gtimer)
{ {
struct fsl_otg_timer *timer = gtimer; struct fsl_otg_timer *timer = gtimer;
struct fsl_otg_timer *tmp_timer; struct fsl_otg_timer *tmp_timer;
@ -395,7 +395,7 @@ void fsl_otg_add_timer(void *gtimer)
} }
/* Remove timer from the timer list; clear timeout status */ /* Remove timer from the timer list; clear timeout status */
void fsl_otg_del_timer(void *gtimer) void fsl_otg_del_timer(struct otg_fsm *fsm, void *gtimer)
{ {
struct fsl_otg_timer *timer = gtimer; struct fsl_otg_timer *timer = gtimer;
struct fsl_otg_timer *tmp_timer, *del_tmp; struct fsl_otg_timer *tmp_timer, *del_tmp;
@ -468,7 +468,7 @@ int fsl_otg_start_host(struct otg_fsm *fsm, int on)
retval = dev->driver->pm->resume(dev); retval = dev->driver->pm->resume(dev);
if (fsm->id) { if (fsm->id) {
/* default-b */ /* default-b */
fsl_otg_drv_vbus(1); fsl_otg_drv_vbus(fsm, 1);
/* /*
* Workaround: b_host can't driver * Workaround: b_host can't driver
* vbus, but PP in PORTSC needs to * vbus, but PP in PORTSC needs to
@ -493,7 +493,7 @@ int fsl_otg_start_host(struct otg_fsm *fsm, int on)
retval = dev->driver->pm->suspend(dev); retval = dev->driver->pm->suspend(dev);
if (fsm->id) if (fsm->id)
/* default-b */ /* default-b */
fsl_otg_drv_vbus(0); fsl_otg_drv_vbus(fsm, 0);
} }
otg_dev->host_working = 0; otg_dev->host_working = 0;
} }

View File

@ -401,6 +401,6 @@ struct fsl_otg_config {
#define GET_A_BUS_REQ _IOR(OTG_IOCTL_MAGIC, 8, int) #define GET_A_BUS_REQ _IOR(OTG_IOCTL_MAGIC, 8, int)
#define GET_B_BUS_REQ _IOR(OTG_IOCTL_MAGIC, 9, int) #define GET_B_BUS_REQ _IOR(OTG_IOCTL_MAGIC, 9, int)
void fsl_otg_add_timer(void *timer); void fsl_otg_add_timer(struct otg_fsm *fsm, void *timer);
void fsl_otg_del_timer(void *timer); void fsl_otg_del_timer(struct otg_fsm *fsm, void *timer);
void fsl_otg_pulse_vbus(void); void fsl_otg_pulse_vbus(void);

View File

@ -83,13 +83,13 @@ struct otg_fsm {
}; };
struct otg_fsm_ops { struct otg_fsm_ops {
void (*chrg_vbus)(int on); void (*chrg_vbus)(struct otg_fsm *fsm, int on);
void (*drv_vbus)(int on); void (*drv_vbus)(struct otg_fsm *fsm, int on);
void (*loc_conn)(int on); void (*loc_conn)(struct otg_fsm *fsm, int on);
void (*loc_sof)(int on); void (*loc_sof)(struct otg_fsm *fsm, int on);
void (*start_pulse)(void); void (*start_pulse)(struct otg_fsm *fsm);
void (*add_timer)(void *timer); void (*add_timer)(struct otg_fsm *fsm, void *timer);
void (*del_timer)(void *timer); void (*del_timer)(struct otg_fsm *fsm, void *timer);
int (*start_host)(struct otg_fsm *fsm, int on); int (*start_host)(struct otg_fsm *fsm, int on);
int (*start_gadget)(struct otg_fsm *fsm, int on); int (*start_gadget)(struct otg_fsm *fsm, int on);
}; };
@ -97,14 +97,14 @@ struct otg_fsm_ops {
static inline void otg_chrg_vbus(struct otg_fsm *fsm, int on) static inline void otg_chrg_vbus(struct otg_fsm *fsm, int on)
{ {
fsm->ops->chrg_vbus(on); fsm->ops->chrg_vbus(fsm, on);
} }
static inline void otg_drv_vbus(struct otg_fsm *fsm, int on) static inline void otg_drv_vbus(struct otg_fsm *fsm, int on)
{ {
if (fsm->drv_vbus != on) { if (fsm->drv_vbus != on) {
fsm->drv_vbus = on; fsm->drv_vbus = on;
fsm->ops->drv_vbus(on); fsm->ops->drv_vbus(fsm, on);
} }
} }
@ -112,7 +112,7 @@ static inline void otg_loc_conn(struct otg_fsm *fsm, int on)
{ {
if (fsm->loc_conn != on) { if (fsm->loc_conn != on) {
fsm->loc_conn = on; fsm->loc_conn = on;
fsm->ops->loc_conn(on); fsm->ops->loc_conn(fsm, on);
} }
} }
@ -120,23 +120,23 @@ static inline void otg_loc_sof(struct otg_fsm *fsm, int on)
{ {
if (fsm->loc_sof != on) { if (fsm->loc_sof != on) {
fsm->loc_sof = on; fsm->loc_sof = on;
fsm->ops->loc_sof(on); fsm->ops->loc_sof(fsm, on);
} }
} }
static inline void otg_start_pulse(struct otg_fsm *fsm) static inline void otg_start_pulse(struct otg_fsm *fsm)
{ {
fsm->ops->start_pulse(); fsm->ops->start_pulse(fsm);
} }
static inline void otg_add_timer(struct otg_fsm *fsm, void *timer) static inline void otg_add_timer(struct otg_fsm *fsm, void *timer)
{ {
fsm->ops->add_timer(timer); fsm->ops->add_timer(fsm, timer);
} }
static inline void otg_del_timer(struct otg_fsm *fsm, void *timer) static inline void otg_del_timer(struct otg_fsm *fsm, void *timer)
{ {
fsm->ops->del_timer(timer); fsm->ops->del_timer(fsm, timer);
} }
int otg_statemachine(struct otg_fsm *fsm); int otg_statemachine(struct otg_fsm *fsm);