Received: by 10.223.185.116 with SMTP id b49csp615579wrg; Wed, 14 Feb 2018 04:24:40 -0800 (PST) X-Google-Smtp-Source: AH8x225FypBhktlAXXRdK5Z8hKesWwWKnpfNviWDCZ5zUU9IdZzPMb+erYPqgQfun18l8CaWyKEX X-Received: by 10.101.96.42 with SMTP id p10mr3822486pgu.364.1518611080257; Wed, 14 Feb 2018 04:24:40 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1518611080; cv=none; d=google.com; s=arc-20160816; b=aGk/Z2z0iu12b6bvEuqtxDXFCB77pryURqqiTB1JTVDW+9ukHz6CclVPdn1kcTsqxP 4IwtQQ5WcR/y4HS5qI0MN6326RKI/czl/EaohXzFP8XWVbHSs2r5sEjl36YnIzY8I2Qs MLz0/SPvPIkbi3WPN+sufxMZvhOOI40XZM/rl9Yn3zEdSoO/J4WkQLR2dS0poQiqRYnY M0bMpCfw2KvDQ2IBjW2vD5r01C4ianKSbegEV35w9J0y6kiin6RE6oitSI10SuPtDjr9 5CIZ1PKH7M4jFeBhdVYSH8aRKHf6ZsVvB1VS/1QIpakFUOT3Qh29pajQQwCYaGwzZubl mXhQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :arc-authentication-results; bh=6OL8X3gMsrwnoZ6IK+o6N6uust+6EHthcE+2YwvpEk4=; b=fong2YDG3WfYBc/xbbsNMJJvrvX4t0OFW5GTQEB5MaXtllltUWSg7sQKuelGPP2FwD LC4yq55+P0OZRAoYBXlE7QtjS1xLYiJ36sg/S42Gg9Bgn9ZLkUS+81Fdabjv9LFK4dLu 65PWmnXPBo5+lD9NYVTbhi2MTUOmnTbi38Wkyfz7vLyN98ivQxpvDetIYR2RU2AXIXaV uUWzaDfRNuXCROfqIgbGw2sba3JqNFWThjnZusd7i2kzRo1AVap5E5KUPMqUBSMA4bB4 1EetSUKyoOxq5OBl0MzWnhe4YboL/HeOoEBbOftl1TUYpatEwlbLqth4dzokvqptkyqm mInA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id t7si1397895pgr.541.2018.02.14.04.24.25; Wed, 14 Feb 2018 04:24:40 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S967623AbeBNMXq (ORCPT + 99 others); Wed, 14 Feb 2018 07:23:46 -0500 Received: from mail.phytec.eu ([217.6.246.34]:46194 "EHLO root.phytec.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754615AbeBNMXn (ORCPT ); Wed, 14 Feb 2018 07:23:43 -0500 Received: from idefix.phytec.de (idefix.phytec.de [172.16.0.10]) by root.phytec.de (Postfix) with ESMTP id 8EA1BA0098E; Wed, 14 Feb 2018 13:23:58 +0100 (CET) Received: from augenblix.phytec.de ([172.16.0.56]) by idefix.phytec.de (IBM Domino Release 9.0.1FP7) with ESMTP id 2018021413233935-177894 ; Wed, 14 Feb 2018 13:23:39 +0100 From: Daniel Schultz To: robh+dt@kernel.org, mark.rutland@arm.com, andrew@lunn.ch, f.fainelli@gmail.com, netdev@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Cc: w.egorov@phytec.de Subject: [PATCH v2 1/2] net: phy: dp83867: Add binding for the CLK_OUT pin muxing option Date: Wed, 14 Feb 2018 13:23:38 +0100 Message-Id: <1518611019-37098-1-git-send-email-d.schultz@phytec.de> X-Mailer: git-send-email 2.7.4 X-MIMETrack: Itemize by SMTP Server on Idefix/Phytec(Release 9.0.1FP7|August 17, 2016) at 14.02.2018 13:23:39, Serialize by Router on Idefix/Phytec(Release 9.0.1FP7|August 17, 2016) at 14.02.2018 13:23:39, Serialize complete at 14.02.2018 13:23:39 X-TNEFEvaluated: 1 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Wadim Egorov The DP83867 has a muxing option for the CLK_OUT pin. It is possible to set CLK_OUT for different channels. Create a binding to select a specific clock for CLK_OUT pin. Signed-off-by: Wadim Egorov Signed-off-by: Daniel Schultz --- Changes: Added check if clk_output_sel has a valid value Only write the clock ouput register if a musing is desired drivers/net/phy/dp83867.c | 19 +++++++++++++++++++ include/dt-bindings/net/ti-dp83867.h | 14 ++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/drivers/net/phy/dp83867.c b/drivers/net/phy/dp83867.c index c1ab976..a862194 100644 --- a/drivers/net/phy/dp83867.c +++ b/drivers/net/phy/dp83867.c @@ -75,6 +75,8 @@ #define DP83867_IO_MUX_CFG_IO_IMPEDANCE_MAX 0x0 #define DP83867_IO_MUX_CFG_IO_IMPEDANCE_MIN 0x1f +#define DP83867_IO_MUX_CFG_CLK_O_SEL_MASK (0x1f << 8) +#define DP83867_IO_MUX_CFG_CLK_O_SEL_SHIFT 8 /* CFG4 bits */ #define DP83867_CFG4_PORT_MIRROR_EN BIT(0) @@ -92,6 +94,7 @@ struct dp83867_private { int io_impedance; int port_mirroring; bool rxctrl_strap_quirk; + int clk_output_sel; }; static int dp83867_ack_interrupt(struct phy_device *phydev) @@ -160,6 +163,14 @@ static int dp83867_of_init(struct phy_device *phydev) dp83867->io_impedance = -EINVAL; /* Optional configuration */ + ret = of_property_read_u32(of_node, "ti,clk-output-sel", + &dp83867->clk_output_sel); + if (ret || dp83867->clk_output_sel > DP83867_CLK_O_SEL_REF_CLK) + /* Keep the default value if ti,clk-output-sel is not set + * or too high + */ + dp83867->clk_output_sel = DP83867_CLK_O_SEL_REF_CLK; + if (of_property_read_bool(of_node, "ti,max-output-impedance")) dp83867->io_impedance = DP83867_IO_MUX_CFG_IO_IMPEDANCE_MAX; else if (of_property_read_bool(of_node, "ti,min-output-impedance")) @@ -295,6 +306,14 @@ static int dp83867_config_init(struct phy_device *phydev) if (dp83867->port_mirroring != DP83867_PORT_MIRROING_KEEP) dp83867_config_port_mirroring(phydev); + /* Clock output selection if muxing property is set */ + if (dp83867->clk_output_sel != DP83867_CLK_O_SEL_REF_CLK) { + val = phy_read_mmd(phydev, DP83867_DEVADDR, DP83867_IO_MUX_CFG); + val &= ~DP83867_IO_MUX_CFG_CLK_O_SEL_MASK; + val |= (dp83867->clk_output_sel << DP83867_IO_MUX_CFG_CLK_O_SEL_SHIFT); + phy_write_mmd(phydev, DP83867_DEVADDR, DP83867_IO_MUX_CFG, val); + } + return 0; } diff --git a/include/dt-bindings/net/ti-dp83867.h b/include/dt-bindings/net/ti-dp83867.h index 172744a..7b16564 100644 --- a/include/dt-bindings/net/ti-dp83867.h +++ b/include/dt-bindings/net/ti-dp83867.h @@ -42,4 +42,18 @@ #define DP83867_RGMIIDCTL_3_75_NS 0xe #define DP83867_RGMIIDCTL_4_00_NS 0xf +/* IO_MUX_CFG - Clock output selection */ +#define DP83867_CLK_O_SEL_CHN_A_RCLK 0x0 +#define DP83867_CLK_O_SEL_CHN_B_RCLK 0x1 +#define DP83867_CLK_O_SEL_CHN_C_RCLK 0x2 +#define DP83867_CLK_O_SEL_CHN_D_RCLK 0x3 +#define DP83867_CLK_O_SEL_CHN_A_RCLK_DIV5 0x4 +#define DP83867_CLK_O_SEL_CHN_B_RCLK_DIV5 0x5 +#define DP83867_CLK_O_SEL_CHN_C_RCLK_DIV5 0x6 +#define DP83867_CLK_O_SEL_CHN_D_RCLK_DIV5 0x7 +#define DP83867_CLK_O_SEL_CHN_A_TCLK 0x8 +#define DP83867_CLK_O_SEL_CHN_B_TCLK 0x9 +#define DP83867_CLK_O_SEL_CHN_C_TCLK 0xA +#define DP83867_CLK_O_SEL_CHN_D_TCLK 0xB +#define DP83867_CLK_O_SEL_REF_CLK 0xC #endif -- 2.7.4