diff options
author | Mauro Carvalho Chehab <mchehab@redhat.com> | 2013-03-08 18:48:42 -0500 |
---|---|---|
committer | Mauro Carvalho Chehab <mchehab@redhat.com> | 2013-03-21 06:45:25 -0400 |
commit | dfbf021c9e6c9de2296eae7b4e89148e7f68b28e (patch) | |
tree | 6d8f90296bb03493995a02bf4e0fffe69c2103ee | |
parent | 347d8f1fa69f4dd021f1ca3d69e1527d95f185e0 (diff) |
[media] siano: Configure board's mtu and xtal
Backported from Doron Cohen's patch:
http://patchwork.linuxtv.org/patch/7889/
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r-- | drivers/media/common/siano/smscoreapi.c | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/drivers/media/common/siano/smscoreapi.c b/drivers/media/common/siano/smscoreapi.c index 67d0319dc013..6b53367f74dc 100644 --- a/drivers/media/common/siano/smscoreapi.c +++ b/drivers/media/common/siano/smscoreapi.c | |||
@@ -825,6 +825,57 @@ static int smscore_init_ir(struct smscore_device_t *coredev) | |||
825 | } | 825 | } |
826 | 826 | ||
827 | /** | 827 | /** |
828 | * configures device features according to board configuration structure. | ||
829 | * | ||
830 | * @param coredev pointer to a coredev object returned by | ||
831 | * smscore_register_device | ||
832 | * | ||
833 | * @return 0 on success, <0 on error. | ||
834 | */ | ||
835 | int smscore_configure_board(struct smscore_device_t *coredev) | ||
836 | { | ||
837 | struct sms_board *board; | ||
838 | |||
839 | board = sms_get_board(coredev->board_id); | ||
840 | if (!board) { | ||
841 | sms_err("no board configuration exist."); | ||
842 | return -EINVAL; | ||
843 | } | ||
844 | |||
845 | if (board->mtu) { | ||
846 | struct SmsMsgData_ST MtuMsg; | ||
847 | sms_debug("set max transmit unit %d", board->mtu); | ||
848 | |||
849 | MtuMsg.xMsgHeader.msgSrcId = 0; | ||
850 | MtuMsg.xMsgHeader.msgDstId = HIF_TASK; | ||
851 | MtuMsg.xMsgHeader.msgFlags = 0; | ||
852 | MtuMsg.xMsgHeader.msgType = MSG_SMS_SET_MAX_TX_MSG_LEN_REQ; | ||
853 | MtuMsg.xMsgHeader.msgLength = sizeof(MtuMsg); | ||
854 | MtuMsg.msgData[0] = board->mtu; | ||
855 | |||
856 | smsendian_handle_tx_message((struct SmsMsgHdr_ST *)&MtuMsg); | ||
857 | coredev->sendrequest_handler(coredev->context, &MtuMsg, | ||
858 | sizeof(MtuMsg)); | ||
859 | } | ||
860 | |||
861 | if (board->crystal) { | ||
862 | struct SmsMsgData_ST CrysMsg; | ||
863 | sms_debug("set crystal value %d", board->crystal); | ||
864 | |||
865 | SMS_INIT_MSG(&CrysMsg.xMsgHeader, | ||
866 | MSG_SMS_NEW_CRYSTAL_REQ, | ||
867 | sizeof(CrysMsg)); | ||
868 | CrysMsg.msgData[0] = board->crystal; | ||
869 | |||
870 | smsendian_handle_tx_message((struct SmsMsgHdr_S *)&CrysMsg); | ||
871 | coredev->sendrequest_handler(coredev->context, &CrysMsg, | ||
872 | sizeof(CrysMsg)); | ||
873 | } | ||
874 | |||
875 | return 0; | ||
876 | } | ||
877 | |||
878 | /** | ||
828 | * sets initial device mode and notifies client hotplugs that device is ready | 879 | * sets initial device mode and notifies client hotplugs that device is ready |
829 | * | 880 | * |
830 | * @param coredev pointer to a coredev object returned by | 881 | * @param coredev pointer to a coredev object returned by |
@@ -840,6 +891,11 @@ int smscore_start_device(struct smscore_device_t *coredev) | |||
840 | sms_info("set device mode faile , rc %d", rc); | 891 | sms_info("set device mode faile , rc %d", rc); |
841 | return rc; | 892 | return rc; |
842 | } | 893 | } |
894 | rc = smscore_configure_board(coredev); | ||
895 | if (rc < 0) { | ||
896 | sms_info("configure board failed , rc %d", rc); | ||
897 | return rc; | ||
898 | } | ||
843 | 899 | ||
844 | kmutex_lock(&g_smscore_deviceslock); | 900 | kmutex_lock(&g_smscore_deviceslock); |
845 | 901 | ||