Commit dfbf021c authored by Mauro Carvalho Chehab's avatar Mauro Carvalho Chehab
Browse files

[media] siano: Configure board's mtu and xtal

Backported from Doron Cohen's patch:
	http://patchwork.linuxtv.org/patch/7889/



Signed-off-by: default avatarMauro Carvalho Chehab <mchehab@redhat.com>
parent 347d8f1f
Loading
Loading
Loading
Loading
+56 −0
Original line number Diff line number Diff line
@@ -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);