From patchwork Sun Feb 7 22:39:10 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Helmut Buchsbaum X-Patchwork-Id: 580106 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 D72DE14032A for ; Mon, 8 Feb 2016 09:41:11 +1100 (AEDT) Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b=DJsob+8j; dkim-atps=neutral Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755188AbcBGWku (ORCPT ); Sun, 7 Feb 2016 17:40:50 -0500 Received: from mail-wm0-f68.google.com ([74.125.82.68]:35034 "EHLO mail-wm0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754919AbcBGWj7 (ORCPT ); Sun, 7 Feb 2016 17:39:59 -0500 Received: by mail-wm0-f68.google.com with SMTP id g62so12876790wme.2 for ; Sun, 07 Feb 2016 14:39:59 -0800 (PST) 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=fP6BTnIt7KQaKk3jM753QCt9++VKSqdfGHfhabi/Ho8=; b=DJsob+8jOyElTr31zdyR5rc8nneV85WXWRuo9CGAlmMDSLrkrFLlnivxpecKXUiUAc iqoyVS+b6d1gEj/snixCfKd1LajgIpZOpOMWD8fS9T2ZzpvuvAhE082q2rGn58ysWypF I7rdUGJIU7jeUtAnHct6aHHHELCKrHFhJm+L3wkuzmjUdtGyVPaDu/WPJtYjjhYu1hCK uzbrFmsH8Sr5KQkyPY1skg8azTFyLJvByZ4YCcT8hyAX4dB/zJQCjj3C7cJalFI8jkQI Okw8G+nCnaTWU5R9Ph/2jqpD0BR9fgVOFmdqiRcUAhuka5Oe0IrU+SkY5udVLayO8eiC UyZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=fP6BTnIt7KQaKk3jM753QCt9++VKSqdfGHfhabi/Ho8=; b=ZMuVAAz+I+gIwPk3zAvJYYPeHhY46yLFfr0wZ09s6Ja4CorTvZbnNM0aDHKqF8mneT v3FTa9Aab9QWgKlAodM6rSXvl7eWFJDhVnlSUOlTRdMkZEERLK8q080s+QAjMFISmpU/ iA7OSODmiUU9Z7rjn9e74G0Uoz1W+QwPWKlhyP3y0Bq2KScvDLU0fagYS8gklooC2VCH v741uVc7cHUOBp4PmyzrzVYYEpb4q7ElgJgEtDerNtasLqVbIVnagdXlJLO7YqVOI3aN pcoFsYuWZld6Cuoa3yx9cC/LcA7cjiSQCeJtDPLvsmALDbZcGT6grFsB9CzhOQ5qs4of UFMQ== X-Gm-Message-State: AG10YOSFasoPl6ve5fHeismatFWxl3DLhpqaZJb8Db8KNHvQuYiNWoJJCPzouCQaspXjtQ== X-Received: by 10.28.63.85 with SMTP id m82mr9797029wma.55.1454884798549; Sun, 07 Feb 2016 14:39:58 -0800 (PST) Received: from jessie64.at.festo.net (178-191-150-217.adsl.highway.telekom.at. [178.191.150.217]) by smtp.gmail.com with ESMTPSA id x10sm26840106wjx.8.2016.02.07.14.39.57 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Sun, 07 Feb 2016 14:39:57 -0800 (PST) From: Helmut Buchsbaum To: "David S. Miller" Cc: Florian Fainelli , netdev@vger.kernel.org, Helmut Buchsbaum Subject: [PATCH 4/7] net: phy: spi_ks8995: add support for resetting switch using GPIO Date: Sun, 7 Feb 2016 23:39:10 +0100 Message-Id: <1454884753-4560-5-git-send-email-helmut.buchsbaum@gmail.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1454884753-4560-1-git-send-email-helmut.buchsbaum@gmail.com> References: <1454884753-4560-1-git-send-email-helmut.buchsbaum@gmail.com> Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org When using device tree it is no more possible to reset the PHY at board level. Furthermore, doing in the driver allows to power down the switch when the it is not used any more. The patch introduces a new optional property "reset-gpios" denoting an appropriate GPIO handle, e.g.: reset-gpios = <&gpio0 46 1> Signed-off-by: Helmut Buchsbaum --- drivers/net/phy/spi_ks8995.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/drivers/net/phy/spi_ks8995.c b/drivers/net/phy/spi_ks8995.c index d50f091..60479c4 100644 --- a/drivers/net/phy/spi_ks8995.c +++ b/drivers/net/phy/spi_ks8995.c @@ -19,6 +19,8 @@ #include #include #include +#include +#include #include @@ -127,6 +129,7 @@ struct ks8995_pdata { int mask; } *settings; int nsettings; + int reset_gpio; }; struct ks8995_switch { @@ -406,6 +409,8 @@ static int ks8995_parse_dt(struct ks8995_switch *ks) if (!np) return 0; + pdata->reset_gpio = of_get_named_gpio(np, "reset-gpios", 0); + /* we have something like: * settings = <0x22 0x80 0xF0>; * ^ ^ ^ @@ -484,6 +489,8 @@ static int ks8995_probe(struct spi_device *spi) if (!ks->pdata) return -ENOMEM; + ks->pdata->reset_gpio = -1; + err = ks8995_parse_dt(ks); if (err) { dev_err(&ks->spi->dev, "bad data DT data\n"); @@ -494,6 +501,18 @@ static int ks8995_probe(struct spi_device *spi) if (!ks->pdata) ks->pdata = spi->dev.platform_data; + if (ks->pdata && gpio_is_valid(ks->pdata->reset_gpio)) { + err = devm_gpio_request_one(&spi->dev, + ks->pdata->reset_gpio, + GPIOF_OUT_INIT_HIGH, + "switch-reset"); + if (err) { + dev_err(&spi->dev, + "failed to get reset-gpios: %d\n", err); + return -EIO; + } + } + spi_set_drvdata(spi, ks); spi->mode = SPI_MODE_0; @@ -534,11 +553,13 @@ static int ks8995_remove(struct spi_device *spi) sysfs_remove_bin_file(&spi->dev.kobj, &ks->regs_attr); + if (ks->pdata && gpio_is_valid(ks->pdata->reset_gpio)) + gpio_set_value(ks->pdata->reset_gpio, 0); + return 0; } /* ------------------------------------------------------------------------ */ - static struct spi_driver ks8995_driver = { .driver = { .name = "spi-ks8995",