diff options
author | Tzafrir Cohen <tzafrir.cohen@xorcom.com> | 2012-03-15 17:32:43 +0000 |
---|---|---|
committer | Tzafrir Cohen <tzafrir.cohen@xorcom.com> | 2012-03-15 17:32:43 +0000 |
commit | cac00d30a549fc4865d06937d1671c0f53fc3fea (patch) | |
tree | 81cfd286446d4371c337438e452c5eb9d5f269dc /drivers | |
parent | d44a188636e8f91aa74dd7b627c7ea9c5e3c9d9a (diff) |
xpp: reset Astribank SPI busses
* A driver reload should reset Astribank hardware
* This patch send an SPI reset after we get AB_DESCRIPTION reply from Astribank
Signed-off-by: Oron Peled <oron.peled@xorcom.com>
Acked-by: Tzafrir Cohen <tzafrir.cohen@xorcom.com>
Origin: http://svnview.digium.com/svn/dahdi?view=rev&rev=10474
git-svn-id: http://svn.asterisk.org/svn/dahdi/linux/branches/2.5@10487 a0bf4364-ded3-4de4-8d8a-66a801d63aff
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/dahdi/xpp/card_global.c | 27 | ||||
-rw-r--r-- | drivers/dahdi/xpp/card_global.h | 5 |
2 files changed, 26 insertions, 6 deletions
diff --git a/drivers/dahdi/xpp/card_global.c b/drivers/dahdi/xpp/card_global.c index ff3b7e0..29c43f0 100644 --- a/drivers/dahdi/xpp/card_global.c +++ b/drivers/dahdi/xpp/card_global.c @@ -422,19 +422,37 @@ int xpp_register_request(xbus_t *xbus, xpd_t *xpd, xportno_t portno, return 0; } -/* 0x23 */ HOSTCMD(GLOBAL, RESET_SYNC_COUNTERS) +/* + * Wrapper for different types of xbus reset + */ +static int send_xbus_reset(xbus_t *xbus, uint8_t reset_mask) { xframe_t *xframe; xpacket_t *pack; BUG_ON(!xbus); - //XBUS_DBG(SYNC, xbus, "\n"); - XFRAME_NEW_CMD(xframe, pack, xbus, GLOBAL, RESET_SYNC_COUNTERS, 0); - RPACKET_FIELD(pack, GLOBAL, RESET_SYNC_COUNTERS, mask) = 0x10; + XFRAME_NEW_CMD(xframe, pack, xbus, GLOBAL, XBUS_RESET, 0); + RPACKET_FIELD(pack, GLOBAL, XBUS_RESET, mask) = reset_mask; send_cmd_frame(xbus, xframe); return 0; } +/* 0x23 */ HOSTCMD(GLOBAL, RESET_SPI) +{ + XBUS_DBG(DEVICES, xbus, "Sending SPI reset\n"); + /* toggle reset line */ + send_xbus_reset(xbus, 0x04); + send_xbus_reset(xbus, 0x00); + return 0; +} + + +/* 0x23 */ HOSTCMD(GLOBAL, RESET_SYNC_COUNTERS) +{ + //XBUS_DBG(SYNC, xbus, "\n"); + return send_xbus_reset(xbus, 0x10); +} + /*---------------- GLOBAL: Astribank Reply Handlers -----------------------*/ HANDLER_DEF(GLOBAL, NULL_REPLY) @@ -526,6 +544,7 @@ HANDLER_DEF(GLOBAL, AB_DESCRIPTION) /* 0x08 */ list_add_tail(&card_desc->card_list, &worker->card_list); spin_unlock_irqrestore(&worker->worker_lock, flags); } + CALL_PROTO(GLOBAL, RESET_SPI, xbus, NULL); if (!xbus_process_worker(xbus)) { ret = -ENODEV; goto out; diff --git a/drivers/dahdi/xpp/card_global.h b/drivers/dahdi/xpp/card_global.h index 6264e84..270027e 100644 --- a/drivers/dahdi/xpp/card_global.h +++ b/drivers/dahdi/xpp/card_global.h @@ -38,7 +38,7 @@ enum global_opcodes { XPROTO_NAME(GLOBAL, SYNC_REPLY) = 0x1A, /**/ XPROTO_NAME(GLOBAL, ERROR_CODE) = 0x22, - XPROTO_NAME(GLOBAL, RESET_SYNC_COUNTERS) = 0x23, + XPROTO_NAME(GLOBAL, XBUS_RESET) = 0x23, XPROTO_NAME(GLOBAL, NULL_REPLY) = 0xFE, }; @@ -87,7 +87,7 @@ DEF_RPACKET_DATA(GLOBAL, SYNC_REPLY, DEF_RPACKET_DATA(GLOBAL, REGISTER_REPLY, reg_cmd_t regcmd; ); -DEF_RPACKET_DATA(GLOBAL, RESET_SYNC_COUNTERS, +DEF_RPACKET_DATA(GLOBAL, XBUS_RESET, byte mask; ); DEF_RPACKET_DATA(GLOBAL, ERROR_CODE, @@ -98,6 +98,7 @@ DEF_RPACKET_DATA(GLOBAL, ERROR_CODE, /* 0x07 */ DECLARE_CMD(GLOBAL, AB_REQUEST); /* 0x19 */ DECLARE_CMD(GLOBAL, SYNC_SOURCE, enum sync_mode mode, int drift); +/* 0x23 */ DECLARE_CMD(GLOBAL, RESET_SPI); /* 0x23 */ DECLARE_CMD(GLOBAL, RESET_SYNC_COUNTERS); int xpp_register_request(xbus_t *xbus, xpd_t *xpd, xportno_t portno, |