From 7a03360df806901fe072e575acc2d86eda2c9d4e Mon Sep 17 00:00:00 2001 From: Mauro Carvalho Chehab Date: Fri, 8 Mar 2013 20:48:42 -0300 Subject: [PATCH] --- yaml --- r: 366604 b: refs/heads/master c: dfbf021c9e6c9de2296eae7b4e89148e7f68b28e h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/media/common/siano/smscoreapi.c | 56 +++++++++++++++++++ 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 31171c415c8e..6f57c7081dbf 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 347d8f1fa69f4dd021f1ca3d69e1527d95f185e0 +refs/heads/master: dfbf021c9e6c9de2296eae7b4e89148e7f68b28e diff --git a/trunk/drivers/media/common/siano/smscoreapi.c b/trunk/drivers/media/common/siano/smscoreapi.c index 67d0319dc013..6b53367f74dc 100644 --- a/trunk/drivers/media/common/siano/smscoreapi.c +++ b/trunk/drivers/media/common/siano/smscoreapi.c @@ -824,6 +824,57 @@ static int smscore_init_ir(struct smscore_device_t *coredev) return 0; } +/** + * configures device features according to board configuration structure. + * + * @param coredev pointer to a coredev object returned by + * smscore_register_device + * + * @return 0 on success, <0 on error. + */ +int smscore_configure_board(struct smscore_device_t *coredev) +{ + struct sms_board *board; + + board = sms_get_board(coredev->board_id); + if (!board) { + sms_err("no board configuration exist."); + return -EINVAL; + } + + if (board->mtu) { + struct SmsMsgData_ST MtuMsg; + sms_debug("set max transmit unit %d", board->mtu); + + MtuMsg.xMsgHeader.msgSrcId = 0; + MtuMsg.xMsgHeader.msgDstId = HIF_TASK; + MtuMsg.xMsgHeader.msgFlags = 0; + MtuMsg.xMsgHeader.msgType = MSG_SMS_SET_MAX_TX_MSG_LEN_REQ; + MtuMsg.xMsgHeader.msgLength = sizeof(MtuMsg); + MtuMsg.msgData[0] = board->mtu; + + smsendian_handle_tx_message((struct SmsMsgHdr_ST *)&MtuMsg); + coredev->sendrequest_handler(coredev->context, &MtuMsg, + sizeof(MtuMsg)); + } + + if (board->crystal) { + struct SmsMsgData_ST CrysMsg; + sms_debug("set crystal value %d", board->crystal); + + SMS_INIT_MSG(&CrysMsg.xMsgHeader, + MSG_SMS_NEW_CRYSTAL_REQ, + sizeof(CrysMsg)); + CrysMsg.msgData[0] = board->crystal; + + smsendian_handle_tx_message((struct SmsMsgHdr_S *)&CrysMsg); + coredev->sendrequest_handler(coredev->context, &CrysMsg, + sizeof(CrysMsg)); + } + + return 0; +} + /** * sets initial device mode and notifies client hotplugs that device is ready * @@ -840,6 +891,11 @@ int smscore_start_device(struct smscore_device_t *coredev) sms_info("set device mode faile , rc %d", rc); return rc; } + rc = smscore_configure_board(coredev); + if (rc < 0) { + sms_info("configure board failed , rc %d", rc); + return rc; + } kmutex_lock(&g_smscore_deviceslock);