From patchwork Wed Jul 2 22:20:47 2014 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alexander Aring X-Patchwork-Id: 366494 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 2F8591400B7 for ; Thu, 3 Jul 2014 08:21:50 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757880AbaGBWVm (ORCPT ); Wed, 2 Jul 2014 18:21:42 -0400 Received: from mail-wg0-f41.google.com ([74.125.82.41]:57661 "EHLO mail-wg0-f41.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757571AbaGBWVi (ORCPT ); Wed, 2 Jul 2014 18:21:38 -0400 Received: by mail-wg0-f41.google.com with SMTP id a1so11872787wgh.12 for ; Wed, 02 Jul 2014 15:21:36 -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=moQe43ru1YCfy4j6b6hNZqcTigyqhsJgVoEkkPoTPO3UtUMLdw/1r62QXEtogbJwkY oGoi/yiuDxGiF9Dlvo19L0WLwgxfdAC+tYo+uoBNthRD/52kHL0P0l5TJ/+4lr9JLrLe XCHdzEy8TVN2QiS2aZGVzbBz+kHURhAVI2PoISIszRJs2Hm68H1jGcMNCJUlJV9gVpu7 K4N4YtXPDzpo/QBJcblhmZ3b4mHSSwLyNUUDFhC3/SDrwTFqRR6IRzGl8twWdvh+tt/5 udRj0hsjxoUcP5S/o1MmXksAtW2pEapHx3Aei6c5nHPTaaNWdBuUht+Q8tichfmZONui xwtg== X-Received: by 10.194.10.36 with SMTP id f4mr551742wjb.61.1404339696365; Wed, 02 Jul 2014 15:21:36 -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.35 for (version=TLSv1.2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 02 Jul 2014 15:21:35 -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 05/13] at86rf230: add support for at86rf23x desense Date: Thu, 3 Jul 2014 00:20:47 +0200 Message-Id: <1404339655-8456-6-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 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)