From patchwork Sat Jun 28 18:33:42 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Aring X-Patchwork-Id: 365304 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 3F9AB1400B5 for ; Sun, 29 Jun 2014 04:35:24 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757049AbaF1Sen (ORCPT ); Sat, 28 Jun 2014 14:34:43 -0400 Received: from mail-we0-f169.google.com ([74.125.82.169]:60119 "EHLO mail-we0-f169.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932122AbaF1Sej (ORCPT ); Sat, 28 Jun 2014 14:34:39 -0400 Received: by mail-we0-f169.google.com with SMTP id t60so6533500wes.14 for ; Sat, 28 Jun 2014 11:34:38 -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=YV1MLE/3PKjkw/F63GG0Ld/ICKRJFvNiBao00mf/QZw=; b=0chV8pFoK18/dUtGRj4mneM5tVu4cyDCK1SRICQloiIgmn6Ihv26khvmwbXOH3GT+g qhH/pGrAHdwN9ReExrofwT0iu44MRhRSUb7jhpL74x+XHh9KVGpMMimfq8O66pLdIN3e JCp2ar9x6YW79QQOUbFTJ3kMjYIYi+Gvq/e7vZRXzKQm6ljicQ/8RoKx4TJRaHyBKqv8 pPjZEOtJ0iEYob+Z7/WchA3kEfjTdIoC9Wmh74xhuH+4SM8KUWihgo5iCkt3kFINjGlp NB36WC/H6j0tCktp2F1/b9xnTkPiNV0ZY980HBbDqefxYO6KemejBWPQFJJ7bu9h3qFg 1g9Q== X-Received: by 10.181.13.5 with SMTP id eu5mr19436259wid.58.1403980478542; Sat, 28 Jun 2014 11:34:38 -0700 (PDT) Received: from omega.localdomain (p4FD3BDAF.dip0.t-ipconnect.de. [79.211.189.175]) by mx.google.com with ESMTPSA id m3sm29433289wjr.49.2014.06.28.11.34.37 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sat, 28 Jun 2014 11:34:37 -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, werner@almesberger.net, Alexander Aring Subject: [PATCH net-next 04/13] at86rf230: remove is212 and add driver data Date: Sat, 28 Jun 2014 20:33:42 +0200 Message-Id: <1403980431-6201-5-git-send-email-alex.aring@gmail.com> X-Mailer: git-send-email 2.0.1 In-Reply-To: <1403980431-6201-1-git-send-email-alex.aring@gmail.com> References: <1403980431-6201-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 7895db7..5958e05 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: