From patchwork Thu Nov 27 19:42:23 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Olli Salonen X-Patchwork-Id: 27180 Received: from mail.tu-berlin.de ([130.149.7.33]) by www.linuxtv.org with esmtp (Exim 4.72) (envelope-from ) id 1Xu4xs-0004qC-49; Thu, 27 Nov 2014 20:42:56 +0100 X-tubIT-Incoming-IP: 209.132.180.67 Received: from vger.kernel.org ([209.132.180.67]) by mail.tu-berlin.de (exim-4.72/mailfrontend-8) with esmtp id 1Xu4xq-0002vv-je; Thu, 27 Nov 2014 20:42:56 +0100 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751174AbaK0Tmj (ORCPT + 1 other); Thu, 27 Nov 2014 14:42:39 -0500 Received: from mail-la0-f48.google.com ([209.85.215.48]:45226 "EHLO mail-la0-f48.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751111AbaK0Tmh (ORCPT ); Thu, 27 Nov 2014 14:42:37 -0500 Received: by mail-la0-f48.google.com with SMTP id s18so4574400lam.7 for ; Thu, 27 Nov 2014 11:42:36 -0800 (PST) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=Lyc5H2cFSc0XgUtqGfuXbCPYR4UP0AamHOZ9wIR8wX4=; b=Cnm/fwpZHrXwnvoTJSPbNOr2+i5yd2Gr//SArmC6rWJlTWU/2dQ+XkdMeQ0x7rOS+Q I+GCi3+dgCtKIl5kL9pwXfVLm6xpv9jvbmX8G3xWJ3MB3GJ/MTnnZeSJtaya9QD/YDDC B4TAUFDMs1t78a+BzQsbM1Ogsc9iBKH77CUt8qEA+STehZ6Yu13VcQeZKDwjj9vLKK6j OpJ6C/wDaUPDUNKho0e1eIpOspvPtx/zaaBla6RZShRaMKTuUSLIYqX7kXtIqoC5ibDM 4bHuO4F8V4uC8Ilnxr+C9j28pIyaWn2bvZIyuKZBiqnqjEU7sTrdM0jboKTbefXQLh1J 706g== X-Gm-Message-State: ALoCoQmRFPafC+IGTR4Evsq7jxAvlg8ClDOd6+GI2jllrBRFA6QbBIaCVaR7jBUtS37vsHSbKjwm X-Received: by 10.112.254.162 with SMTP id aj2mr41118909lbd.70.1417117355829; Thu, 27 Nov 2014 11:42:35 -0800 (PST) Received: from dl160.lan (188-67-15-102.bb.dnainternet.fi. [188.67.15.102]) by mx.google.com with ESMTPSA id eg2sm2083915lbb.29.2014.11.27.11.42.34 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Thu, 27 Nov 2014 11:42:34 -0800 (PST) From: Olli Salonen To: linux-media@vger.kernel.org Cc: Olli Salonen Subject: [PATCH 2/2] si2168: add support for firmware files in new format Date: Thu, 27 Nov 2014 21:42:23 +0200 Message-Id: <1417117343-1793-2-git-send-email-olli.salonen@iki.fi> X-Mailer: git-send-email 1.9.1 In-Reply-To: <1417117343-1793-1-git-send-email-olli.salonen@iki.fi> References: <1417117343-1793-1-git-send-email-olli.salonen@iki.fi> Sender: linux-media-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-media@vger.kernel.org X-PMX-Version: 6.0.0.2142326, Antispam-Engine: 2.7.2.2107409, Antispam-Data: 2014.11.27.193323 X-PMX-Spam: Gauge=IIIIIIII, Probability=8%, Report=' HTML_00_01 0.05, HTML_00_10 0.05, BODYTEXTP_SIZE_3000_LESS 0, BODY_SIZE_2000_2999 0, BODY_SIZE_5000_LESS 0, BODY_SIZE_7000_LESS 0, REFERENCES 0, URI_ENDS_IN_HTML 0, __ANY_URI 0, __CP_URI_IN_BODY 0, __HAS_FROM 0, __HAS_MSGID 0, __HAS_X_MAILER 0, __HAS_X_MAILING_LIST 0, __IN_REP_TO 0, __MIME_TEXT_ONLY 0, __REFERENCES 0, __SANE_MSGID 0, __STOCK_PHRASE_7 0, __SUBJ_ALPHA_END 0, __TO_MALFORMED_2 0, __TO_NO_NAME 0, __URI_NS , __YOUTUBE_RCVD 0' This patch adds support for new type of firmware versions of Si2168 chip. Old type: n x 8 bytes (all data, first byte seems to be 04 or 05) New type: n x 17 bytes (1 byte indicates len and max 16 bytes data) New version of TechnoTrend CT2-4400 drivers (http://www.tt-downloads.de/bda-treiber_4.3.0.0.zip) contains newer firmware for Si2168-B40 that is in the new format. It can be extracted with the following command: dd if=ttTVStick4400_64.sys ibs=1 skip=323872 count=6919 of=dvb-demod-si2168-b40-01.fw Signed-off-by: Olli Salonen Reviewed-by: Antti Palosaari --- drivers/media/dvb-frontends/si2168.c | 46 +++++++++++++++++++++++++----------- 1 file changed, 32 insertions(+), 14 deletions(-) diff --git a/drivers/media/dvb-frontends/si2168.c b/drivers/media/dvb-frontends/si2168.c index 6da38e8..ce9ab44 100644 --- a/drivers/media/dvb-frontends/si2168.c +++ b/drivers/media/dvb-frontends/si2168.c @@ -462,20 +462,38 @@ static int si2168_init(struct dvb_frontend *fe) dev_info(&s->client->dev, "downloading firmware from file '%s'\n", fw_file); - for (remaining = fw->size; remaining > 0; remaining -= i2c_wr_max) { - len = remaining; - if (len > i2c_wr_max) - len = i2c_wr_max; - - memcpy(cmd.args, &fw->data[fw->size - remaining], len); - cmd.wlen = len; - cmd.rlen = 1; - ret = si2168_cmd_execute(s, &cmd); - if (ret) { - dev_err(&s->client->dev, - "firmware download failed=%d\n", - ret); - goto error_fw_release; + if ((fw->size % 17 == 0) && (fw->data[0] > 5)) { + /* firmware is in the new format */ + for (remaining = fw->size; remaining > 0; remaining -= 17) { + len = fw->data[fw->size - remaining]; + memcpy(cmd.args, &fw->data[(fw->size - remaining) + 1], len); + cmd.wlen = len; + cmd.rlen = 1; + ret = si2168_cmd_execute(s, &cmd); + if (ret) { + dev_err(&s->client->dev, + "firmware download failed=%d\n", + ret); + goto error_fw_release; + } + } + } else { + /* firmware is in the old format */ + for (remaining = fw->size; remaining > 0; remaining -= i2c_wr_max) { + len = remaining; + if (len > i2c_wr_max) + len = i2c_wr_max; + + memcpy(cmd.args, &fw->data[fw->size - remaining], len); + cmd.wlen = len; + cmd.rlen = 1; + ret = si2168_cmd_execute(s, &cmd); + if (ret) { + dev_err(&s->client->dev, + "firmware download failed=%d\n", + ret); + goto error_fw_release; + } } }