aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <mchehab@redhat.com>2013-03-08 18:48:42 -0500
committerMauro Carvalho Chehab <mchehab@redhat.com>2013-03-21 06:45:25 -0400
commitdfbf021c9e6c9de2296eae7b4e89148e7f68b28e (patch)
tree6d8f90296bb03493995a02bf4e0fffe69c2103ee
parent347d8f1fa69f4dd021f1ca3d69e1527d95f185e0 (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.c56
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 */
835int 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