From patchwork Wed Jul 2 22:20:46 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Aring X-Patchwork-Id: 366502 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 4C3091400B7 for ; Thu, 3 Jul 2014 08:22:37 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758034AbaGBWWR (ORCPT ); Wed, 2 Jul 2014 18:22:17 -0400 Received: from mail-wi0-f179.google.com ([209.85.212.179]:35843 "EHLO mail-wi0-f179.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753922AbaGBWVg (ORCPT ); Wed, 2 Jul 2014 18:21:36 -0400 Received: by mail-wi0-f179.google.com with SMTP id cc10so1274486wib.12 for ; Wed, 02 Jul 2014 15:21:35 -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:in-reply-to:references; bh=maVnJwCtcGa/oF6zi1MACyxqgqnedwbg9ZtKIroZKgo=; b=pj1wkfrhTIEkoDP+Gexw/HffJ9hUNl8+IEUw9NW2UITyR1myMyvgYGhigHkyvO3oP6 tMoPbrlZjcjaT2QgCGmb5UgErgKXXic/++JmA+krl74/qwmb6hemzY5Q0xmeOL8HCQfn cpORhBXu17+yUvIchYByFbx9H6kCoiaxx3pz4IRCMj9gYkgYTmpxUeAff6tY1jILZeKw TFAWqhPebw7Epn63Qvg7oDPtKVIy/tYH/XlEIn4UCFp6aoW2OZSY0/oMVsG4+YkBq70f 5yHhIXgrsfVoZrN17paTOQUqbxM6WbIYgt1aG0IAbUwnX9VqjtokXpOYFxK8KTnkl4A1 Ft/A== X-Received: by 10.194.134.70 with SMTP id pi6mr635328wjb.1.1404339695485; Wed, 02 Jul 2014 15:21:35 -0700 (PDT) Received: from omega.localdomain (p4FD3BDAF.dip0.t-ipconnect.de. [79.211.189.175]) by mx.google.com with ESMTPSA id a13sm57797875wjs.12.2014.07.02.15.21.34 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 02 Jul 2014 15:21:34 -0700 (PDT) From: Alexander Aring To: alex.bluesman.smirnov@gmail.com Cc: dbaryshkov@gmail.com, linux-zigbee-devel@lists.sourceforge.net, netdev@vger.kernel.org, stilwellt@openlabs.co, Alexander Aring Subject: [PATCH v3 net-next 04/13] at86rf230: remove is212 and add driver data Date: Thu, 3 Jul 2014 00:20:46 +0200 Message-Id: <1404339655-8456-5-git-send-email-alex.aring@gmail.com> X-Mailer: git-send-email 2.0.1 In-Reply-To: <1404339655-8456-1-git-send-email-alex.aring@gmail.com> References: <1404339655-8456-1-git-send-email-alex.aring@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This patch adds a new at86rf2xx_chip_data structure which holds device specific attributes. Instead of runtime decisions "if (is212())" we set callbacks/attributes while device detection. Signed-off-by: Alexander Aring --- drivers/net/ieee802154/at86rf230.c | 59 +++++++++++++++++++++++--------------- 1 file changed, 36 insertions(+), 23 deletions(-) diff --git a/drivers/net/ieee802154/at86rf230.c b/drivers/net/ieee802154/at86rf230.c index 7d96cd4..694f5cf 100644 --- a/drivers/net/ieee802154/at86rf230.c +++ b/drivers/net/ieee802154/at86rf230.c @@ -38,12 +38,19 @@ #include #include +struct at86rf230_local; +/* at86rf2xx chip depend data. + * All timings are in us. + */ +struct at86rf2xx_chip_data { + int rssi_base_val; + + int (*set_channel)(struct at86rf230_local *, int, int); +}; + struct at86rf230_local { struct spi_device *spi; - u8 part; - u8 vers; - u8 buf[2]; struct mutex bmux; @@ -56,16 +63,11 @@ struct at86rf230_local { spinlock_t lock; bool irq_busy; bool is_tx; - bool tx_aret; - int rssi_base_val; + struct at86rf2xx_chip_data *data; + bool tx_aret; }; -static bool is_rf212(struct at86rf230_local *local) -{ - return local->part == 7; -} - #define RG_TRX_STATUS (0x01) #define SR_TRX_STATUS 0x01, 0x1f, 0 #define SR_RESERVED_01_3 0x01, 0x20, 5 @@ -593,10 +595,8 @@ at86rf230_stop(struct ieee802154_dev *dev) } static int -at86rf230_set_channel(struct at86rf230_local *lp, int page, int channel) +at86rf23x_set_channel(struct at86rf230_local *lp, int page, int channel) { - lp->rssi_base_val = -91; - return at86rf230_write_subreg(lp, SR_CHANNEL, channel); } @@ -614,10 +614,10 @@ at86rf212_set_channel(struct at86rf230_local *lp, int page, int channel) if (page == 0) { rc = at86rf230_write_subreg(lp, SR_BPSK_QPSK, 0); - lp->rssi_base_val = -100; + lp->data->rssi_base_val = -100; } else { rc = at86rf230_write_subreg(lp, SR_BPSK_QPSK, 1); - lp->rssi_base_val = -98; + lp->data->rssi_base_val = -98; } if (rc < 0) return rc; @@ -639,10 +639,7 @@ at86rf230_channel(struct ieee802154_dev *dev, int page, int channel) return -EINVAL; } - if (is_rf212(lp)) - rc = at86rf212_set_channel(lp, page, channel); - else - rc = at86rf230_set_channel(lp, page, channel); + rc = lp->data->set_channel(lp, page, channel); if (rc < 0) return rc; @@ -827,10 +824,10 @@ at86rf230_set_cca_ed_level(struct ieee802154_dev *dev, s32 level) struct at86rf230_local *lp = dev->priv; int desens_steps; - if (level < lp->rssi_base_val || level > 30) + if (level < lp->data->rssi_base_val || level > 30) return -EINVAL; - desens_steps = (level - lp->rssi_base_val) * 100 / 207; + desens_steps = (level - lp->data->rssi_base_val) * 100 / 207; return at86rf230_write_subreg(lp, SR_CCA_ED_THRES, desens_steps); } @@ -889,6 +886,21 @@ static struct ieee802154_ops at86rf230_ops = { .set_frame_retries = at86rf230_set_frame_retries, }; +static struct at86rf2xx_chip_data at86rf233_data = { + .rssi_base_val = -91, + .set_channel = at86rf23x_set_channel, +}; + +static struct at86rf2xx_chip_data at86rf231_data = { + .rssi_base_val = -91, + .set_channel = at86rf23x_set_channel, +}; + +static struct at86rf2xx_chip_data at86rf212_data = { + .rssi_base_val = -100, + .set_channel = at86rf212_set_channel, +}; + static void at86rf230_irqwork(struct work_struct *work) { struct at86rf230_local *lp = @@ -1061,8 +1073,6 @@ at86rf230_detect_device(struct at86rf230_local *lp) return -EINVAL; } - lp->part = part; - lp->vers = version; lp->dev->extra_tx_headroom = 0; lp->dev->flags = IEEE802154_HW_OMIT_CKSUM | IEEE802154_HW_AACK | IEEE802154_HW_TXPOWER | IEEE802154_HW_CSMA; @@ -1074,11 +1084,13 @@ at86rf230_detect_device(struct at86rf230_local *lp) break; case 3: chip = "at86rf231"; + lp->data = &at86rf231_data; lp->dev->phy->channels_supported[0] = 0x7FFF800; break; case 7: chip = "at86rf212"; if (version == 1) { + lp->data = &at86rf212_data; lp->dev->flags |= IEEE802154_HW_LBT; lp->dev->phy->channels_supported[0] = 0x00007FF; lp->dev->phy->channels_supported[2] = 0x00007FF; @@ -1088,6 +1100,7 @@ at86rf230_detect_device(struct at86rf230_local *lp) break; case 11: chip = "at86rf233"; + lp->data = &at86rf233_data; lp->dev->phy->channels_supported[0] = 0x7FFF800; break; default: