From patchwork Sat Oct 12 08:54:45 2013 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Luis Alves X-Patchwork-Id: 20355 X-Patchwork-Delegate: mkrufky@linuxtv.org Received: from mail.tu-berlin.de ([130.149.7.33]) by www.linuxtv.org with esmtp (Exim 4.72) (envelope-from ) id 1VUuyQ-00025X-Vi; Sat, 12 Oct 2013 10:54:59 +0200 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-6) with esmtp id 1VUuyO-00066A-64; Sat, 12 Oct 2013 10:54:58 +0200 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752163Ab3JLIyy (ORCPT + 1 other); Sat, 12 Oct 2013 04:54:54 -0400 Received: from mail-we0-f179.google.com ([74.125.82.179]:53087 "EHLO mail-we0-f179.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750865Ab3JLIyw (ORCPT ); Sat, 12 Oct 2013 04:54:52 -0400 Received: by mail-we0-f179.google.com with SMTP id w61so5270216wes.10 for ; Sat, 12 Oct 2013 01:54:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id; bh=QUVwe7QyCBsWutJLySGckoHy0zh72fjQCWWCSq+0qUI=; b=aJS339ddZ7svSCjmhZz+pSL+hdFWa0KoniQGumk33NDKcdIe/Je1B7B/QQpfdFs6bE 2rZ2JnXzobid2JgODF7dXxbSko817znibHkOoYgNbjsQijnaja+5yQ6aC5ZL5teYpsx9 Ax7Kxcg5Ew9DBsswNnuDgXen/k8Kf9gx+whB2r3M5gp8qII2gqeNtpMzrP9vn3thjBSC fA0nY8mGK3v1474wXJ+EEISWVD44GTaXCZmhqKjEfU0XyLG1uUIK/6PVZEirtDhFRuvE BmnkUoDAuW4FYAzcrXVJwT8RHE0T1b0p2FxRph3BmT+3eZqVR86dw6DbHCMiPmySvIdg IrtQ== X-Received: by 10.180.185.10 with SMTP id ey10mr6548138wic.29.1381568091194; Sat, 12 Oct 2013 01:54:51 -0700 (PDT) Received: from localhost.localdomain (a89-152-209-152.cpe.netcabo.pt. [89.152.209.152]) by mx.google.com with ESMTPSA id ey4sm13220844wic.11.1969.12.31.16.00.00 (version=TLSv1.1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Sat, 12 Oct 2013 01:54:50 -0700 (PDT) From: Luis Alves To: mkrufky@linuxtv.org Cc: crope@iki.fi, linux-media@vger.kernel.org, mchehab@infradead.org, Luis Alves Subject: [PATCH] cx24117: Fix/enhance set_voltage function. Date: Sat, 12 Oct 2013 09:54:45 +0100 Message-Id: <1381568085-2407-1-git-send-email-ljalvs@gmail.com> X-Mailer: git-send-email 1.7.9.5 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: 2013.10.12.84514 X-PMX-Spam: Gauge=IIIIIIIII, Probability=9%, Report=' FORGED_FROM_GMAIL 0.1, MULTIPLE_RCPTS 0.1, HTML_00_01 0.05, HTML_00_10 0.05, BODY_SIZE_4000_4999 0, BODY_SIZE_5000_LESS 0, BODY_SIZE_7000_LESS 0, DKIM_SIGNATURE 0, URI_ENDS_IN_HTML 0, __ANY_URI 0, __CP_URI_IN_BODY 0, __FRAUD_BODY_WEBMAIL 0, __FRAUD_WEBMAIL 0, __FRAUD_WEBMAIL_FROM 0, __FROM_GMAIL 0, __HAS_FROM 0, __HAS_MSGID 0, __HAS_X_MAILER 0, __HAS_X_MAILING_LIST 0, __LINES_OF_YELLING 0, __MIME_TEXT_ONLY 0, __MULTIPLE_RCPTS_CC_X2 0, __PHISH_SPEAR_STRUCTURE_1 0, __SANE_MSGID 0, __TO_MALFORMED_2 0, __TO_NO_NAME 0, __URI_NO_WWW 0, __URI_NS , __YOUTUBE_RCVD 0' Hi, On this patch: Added a few defines to describe what every constant in the set_voltage function. Added the description to the CX24117 GPIO control commands. Moved the GPIODIR setup to the initfe function. Regards, Luis Signed-off-by: Luis Alves --- drivers/media/dvb-frontends/cx24117.c | 60 +++++++++++++++++++++------------ 1 file changed, 38 insertions(+), 22 deletions(-) diff --git a/drivers/media/dvb-frontends/cx24117.c b/drivers/media/dvb-frontends/cx24117.c index 476b422..3c7523b 100644 --- a/drivers/media/dvb-frontends/cx24117.c +++ b/drivers/media/dvb-frontends/cx24117.c @@ -129,6 +129,14 @@ #define CX24117_DISEQC_MINI_A (0) #define CX24117_DISEQC_MINI_B (1) +/* LNB voltage enable GPIO pins */ +#define CX24117_DEMOD0_LNBDCPIN (1 << 4) +#define CX24117_DEMOD1_LNBDCPIN (1 << 5) + +/* Demod to LNB mapping */ +#define CX24117_DEMOD0_LNB (1) +#define CX24117_DEMOD1_LNB (0) + #define CX24117_PNE (0) /* 0 disabled / 2 enabled */ #define CX24117_OCC (1) /* 0 disabled / 1 enabled */ @@ -142,6 +150,8 @@ enum cmds { CMD_LNBSEND = 0x21, /* Formerly CMD_SEND_DISEQC */ CMD_LNBDCLEVEL = 0x22, CMD_SET_TONE = 0x23, + CMD_GPIODIR = 0x32, + CMD_GPIOOUT = 0x33, CMD_UPDFWVERS = 0x35, CMD_TUNERSLEEP = 0x36, }; @@ -891,7 +901,8 @@ static int cx24117_set_voltage(struct dvb_frontend *fe, struct cx24117_state *state = fe->demodulator_priv; struct cx24117_cmd cmd; int ret; - u8 reg = (state->demod == 0) ? 0x10 : 0x20; + u8 pin = (state->demod == 0) ? + CX24117_DEMOD0_LNBDCPIN : CX24117_DEMOD1_LNBDCPIN; dev_dbg(&state->priv->i2c->dev, "%s() demod%d %s\n", __func__, state->demod, @@ -899,26 +910,18 @@ static int cx24117_set_voltage(struct dvb_frontend *fe, voltage == SEC_VOLTAGE_18 ? "SEC_VOLTAGE_18" : "SEC_VOLTAGE_OFF"); - /* CMD 32 */ - cmd.args[0] = 0x32; - cmd.args[1] = reg; - cmd.args[2] = reg; - cmd.len = 3; - ret = cx24117_cmd_execute(fe, &cmd); - if (ret) - return ret; - if ((voltage == SEC_VOLTAGE_13) || (voltage == SEC_VOLTAGE_18)) { - /* CMD 33 */ - cmd.args[0] = 0x33; - cmd.args[1] = reg; - cmd.args[2] = reg; + /* Turn on LNB DC voltage */ + cmd.args[0] = CMD_GPIOOUT; + cmd.args[1] = pin; /* level */ + cmd.args[2] = pin; /* mask */ cmd.len = 3; ret = cx24117_cmd_execute(fe, &cmd); if (ret != 0) return ret; + /* Wait for any pending diseqc TX */ ret = cx24117_wait_for_lnb(fe); if (ret != 0) return ret; @@ -926,22 +929,25 @@ static int cx24117_set_voltage(struct dvb_frontend *fe, /* Wait for voltage/min repeat delay */ msleep(100); - /* CMD 22 - CMD_LNBDCLEVEL */ + /* Set DC level (0=13V 1=18V) */ cmd.args[0] = CMD_LNBDCLEVEL; - cmd.args[1] = state->demod ? 0 : 1; - cmd.args[2] = (voltage == SEC_VOLTAGE_18 ? 0x01 : 0x00); + cmd.args[1] = (state->demod == 0) ? + CX24117_DEMOD0_LNB : CX24117_DEMOD1_LNB; + cmd.args[2] = (voltage == SEC_VOLTAGE_18 ? 1 : 0); cmd.len = 3; + ret = cx24117_cmd_execute(fe, &cmd); /* Min delay time before DiSEqC send */ msleep(20); } else { - cmd.args[0] = 0x33; - cmd.args[1] = 0x00; - cmd.args[2] = reg; + /* Turn off LNB DC voltage */ + cmd.args[0] = CMD_GPIOOUT; + cmd.args[1] = 0; /* level */ + cmd.args[2] = pin; /* mask */ cmd.len = 3; + ret = cx24117_cmd_execute(fe, &cmd); } - - return cx24117_cmd_execute(fe, &cmd); + return ret; } static int cx24117_set_tone(struct dvb_frontend *fe, @@ -1260,6 +1266,16 @@ static int cx24117_initfe(struct dvb_frontend *fe) cmd.args[2] = CX24117_OCC; cmd.len = 3; ret = cx24117_cmd_execute_nolock(fe, &cmd); + if (ret != 0) + goto exit; + + /* Setup cx24117 GPIO direction */ + /* These pins turn on/off LNB DC voltage */ + cmd.args[0] = CMD_GPIODIR; + cmd.args[1] = CX24117_DEMOD0_LNBDCPIN | CX24117_DEMOD1_LNBDCPIN; + cmd.args[2] = CX24117_DEMOD0_LNBDCPIN | CX24117_DEMOD1_LNBDCPIN; + cmd.len = 3; + ret = cx24117_cmd_execute_nolock(fe, &cmd); exit: mutex_unlock(&state->priv->fe_lock);