From patchwork Wed Jul 2 15:10:02 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Aring X-Patchwork-Id: 366398 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 CEBD114009B for ; Thu, 3 Jul 2014 01:10:58 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754827AbaGBPKz (ORCPT ); Wed, 2 Jul 2014 11:10:55 -0400 Received: from mail-wi0-f177.google.com ([209.85.212.177]:37806 "EHLO mail-wi0-f177.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754399AbaGBPKY (ORCPT ); Wed, 2 Jul 2014 11:10:24 -0400 Received: by mail-wi0-f177.google.com with SMTP id r20so693752wiv.10 for ; Wed, 02 Jul 2014 08:10:22 -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=kLCxkdyAqXln1YEri//arGewtBWTdHUV2pcKZjSybkc=; b=LF8ElNAt5g9O1ufd2hgEYooc7JfgYoNbJPEys5IFyZahuaRugcKJ/E4AGLg3tSx8UU lxIi7rVzUD6Ywqh1NVmA24JOS+VmQzSaRKc37hjTpnGaTWg/VY2og0DcVmJSwRbzMiod hLbCvRHIjaMjq5mH3rZZ/T7thuQxjqu1zV98I9/7cXcV3BcDoJXyH/x7iygiHV0Zf94b dW0E0AQh9zd4RIQiUIvcivp/pf8UZUTD6Jxx2tLVhsVKpVMwXCUq2IrppsAVleeqdC8e CQl87/U/RPYv9IVSl5gAkOHDKdv/zbgRIYm7OOd37p7wkWtYMB3yoDzA5tQXFngmrkZD +V/A== X-Received: by 10.180.94.166 with SMTP id dd6mr4821666wib.33.1404313822717; Wed, 02 Jul 2014 08:10:22 -0700 (PDT) Received: from omega.localdomain (p4FD3BDAF.dip0.t-ipconnect.de. [79.211.189.175]) by mx.google.com with ESMTPSA id cj8sm55656607wjb.5.2014.07.02.08.10.21 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 02 Jul 2014 08:10:22 -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 v2 net-next 05/13] at86rf230: add support for at86rf23x desense Date: Wed, 2 Jul 2014 17:10:02 +0200 Message-Id: <1404313810-30232-6-git-send-email-alex.aring@gmail.com> X-Mailer: git-send-email 2.0.1 In-Reply-To: <1404313810-30232-1-git-send-email-alex.aring@gmail.com> References: <1404313810-30232-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 To set the CCA_ED_THRES register the calculation for at86rf23x is different than for at86rf212. This patch adds a new callback for this calculation in chip data struct. Signed-off-by: Alexander Aring --- drivers/net/ieee802154/at86rf230.c | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/drivers/net/ieee802154/at86rf230.c b/drivers/net/ieee802154/at86rf230.c index 694f5cf..6556fece 100644 --- a/drivers/net/ieee802154/at86rf230.c +++ b/drivers/net/ieee802154/at86rf230.c @@ -46,6 +46,7 @@ struct at86rf2xx_chip_data { int rssi_base_val; int (*set_channel)(struct at86rf230_local *, int, int); + int (*get_desense_steps)(struct at86rf230_local *, s32); }; struct at86rf230_local { @@ -819,17 +820,27 @@ at86rf230_set_cca_mode(struct ieee802154_dev *dev, u8 mode) } static int +at86rf212_get_desens_steps(struct at86rf230_local *lp, s32 level) +{ + return (level - lp->data->rssi_base_val) * 100 / 207; +} + +static int +at86rf23x_get_desens_steps(struct at86rf230_local *lp, s32 level) +{ + return (level - lp->data->rssi_base_val) / 2; +} + +static int at86rf230_set_cca_ed_level(struct ieee802154_dev *dev, s32 level) { struct at86rf230_local *lp = dev->priv; - int desens_steps; if (level < lp->data->rssi_base_val || level > 30) return -EINVAL; - desens_steps = (level - lp->data->rssi_base_val) * 100 / 207; - - return at86rf230_write_subreg(lp, SR_CCA_ED_THRES, desens_steps); + return at86rf230_write_subreg(lp, SR_CCA_ED_THRES, + lp->data->get_desense_steps(lp, level)); } static int @@ -889,16 +900,19 @@ static struct ieee802154_ops at86rf230_ops = { static struct at86rf2xx_chip_data at86rf233_data = { .rssi_base_val = -91, .set_channel = at86rf23x_set_channel, + .get_desense_steps = at86rf23x_get_desens_steps }; static struct at86rf2xx_chip_data at86rf231_data = { .rssi_base_val = -91, .set_channel = at86rf23x_set_channel, + .get_desense_steps = at86rf23x_get_desens_steps }; static struct at86rf2xx_chip_data at86rf212_data = { .rssi_base_val = -100, .set_channel = at86rf212_set_channel, + .get_desense_steps = at86rf212_get_desens_steps }; static void at86rf230_irqwork(struct work_struct *work)