Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Linux/drivers/pinctrl/intel/   (Open Source Betriebssystem Version 6.17.9©)  Datei vom 24.10.2025 mit Größe 8 kB image not shown  

Quelle  pinctrl-denverton.c   Sprache: C

 
// SPDX-License-Identifier: GPL-2.0
/*
 * Intel Denverton SoC pinctrl/GPIO driver
 *
 * Copyright (C) 2017, Intel Corporation
 * Author: Mika Westerberg <mika.westerberg@linux.intel.com>
 */


#include <linux/mod_devicetable.h>
#include <linux/module.h>
#include <linux/platform_device.h>
#include <linux/pm.h>

#include <linux/pinctrl/pinctrl.h>

#include "pinctrl-intel.h"

#define DNV_PAD_OWN 0x020
#define DNV_PADCFGLOCK 0x090
#define DNV_HOSTSW_OWN 0x0C0
#define DNV_GPI_IS 0x100
#define DNV_GPI_IE 0x120

#define DNV_GPP(n, s, e)    \
 {      \
  .reg_num = (n),    \
  .base = (s),    \
  .size = ((e) - (s) + 1),  \
 }

#define DNV_COMMUNITY(b, s, e, g)   \
 INTEL_COMMUNITY_GPPS(b, s, e, g, DNV)

/* Denverton */
static const struct pinctrl_pin_desc dnv_pins[] = {
 /* North ALL */
 PINCTRL_PIN(0, "GBE0_SDP0"),
 PINCTRL_PIN(1, "GBE1_SDP0"),
 PINCTRL_PIN(2, "GBE0_SDP1"),
 PINCTRL_PIN(3, "GBE1_SDP1"),
 PINCTRL_PIN(4, "GBE0_SDP2"),
 PINCTRL_PIN(5, "GBE1_SDP2"),
 PINCTRL_PIN(6, "GBE0_SDP3"),
 PINCTRL_PIN(7, "GBE1_SDP3"),
 PINCTRL_PIN(8, "GBE2_LED0"),
 PINCTRL_PIN(9, "GBE2_LED1"),
 PINCTRL_PIN(10, "GBE0_I2C_CLK"),
 PINCTRL_PIN(11, "GBE0_I2C_DATA"),
 PINCTRL_PIN(12, "GBE1_I2C_CLK"),
 PINCTRL_PIN(13, "GBE1_I2C_DATA"),
 PINCTRL_PIN(14, "NCSI_RXD0"),
 PINCTRL_PIN(15, "NCSI_CLK_IN"),
 PINCTRL_PIN(16, "NCSI_RXD1"),
 PINCTRL_PIN(17, "NCSI_CRS_DV"),
 PINCTRL_PIN(18, "IDSLDO_VID_TICKLE"),
 PINCTRL_PIN(19, "NCSI_TX_EN"),
 PINCTRL_PIN(20, "NCSI_TXD0"),
 PINCTRL_PIN(21, "NCSI_TXD1"),
 PINCTRL_PIN(22, "NCSI_ARB_OUT"),
 PINCTRL_PIN(23, "GBE0_LED0"),
 PINCTRL_PIN(24, "GBE0_LED1"),
 PINCTRL_PIN(25, "GBE1_LED0"),
 PINCTRL_PIN(26, "GBE1_LED1"),
 PINCTRL_PIN(27, "SPARE_0"),
 PINCTRL_PIN(28, "PCIE_CLKREQ0_N"),
 PINCTRL_PIN(29, "PCIE_CLKREQ1_N"),
 PINCTRL_PIN(30, "PCIE_CLKREQ2_N"),
 PINCTRL_PIN(31, "PCIE_CLKREQ3_N"),
 PINCTRL_PIN(32, "PCIE_CLKREQ4_N"),
 PINCTRL_PIN(33, "GBE_MDC"),
 PINCTRL_PIN(34, "GBE_MDIO"),
 PINCTRL_PIN(35, "SVID_ALERT_N"),
 PINCTRL_PIN(36, "SVID_DATA"),
 PINCTRL_PIN(37, "SVID_CLK"),
 PINCTRL_PIN(38, "THERMTRIP_N"),
 PINCTRL_PIN(39, "PROCHOT_N"),
 PINCTRL_PIN(40, "MEMHOT_N"),
 /* South DFX */
 PINCTRL_PIN(41, "DFX_PORT_CLK0"),
 PINCTRL_PIN(42, "DFX_PORT_CLK1"),
 PINCTRL_PIN(43, "DFX_PORT0"),
 PINCTRL_PIN(44, "DFX_PORT1"),
 PINCTRL_PIN(45, "DFX_PORT2"),
 PINCTRL_PIN(46, "DFX_PORT3"),
 PINCTRL_PIN(47, "DFX_PORT4"),
 PINCTRL_PIN(48, "DFX_PORT5"),
 PINCTRL_PIN(49, "DFX_PORT6"),
 PINCTRL_PIN(50, "DFX_PORT7"),
 PINCTRL_PIN(51, "DFX_PORT8"),
 PINCTRL_PIN(52, "DFX_PORT9"),
 PINCTRL_PIN(53, "DFX_PORT10"),
 PINCTRL_PIN(54, "DFX_PORT11"),
 PINCTRL_PIN(55, "DFX_PORT12"),
 PINCTRL_PIN(56, "DFX_PORT13"),
 PINCTRL_PIN(57, "DFX_PORT14"),
 PINCTRL_PIN(58, "DFX_PORT15"),
 /* South GPP0 */
 PINCTRL_PIN(59, "SPI_TPM_CS_N"),
 PINCTRL_PIN(60, "UART2_CTS"),
 PINCTRL_PIN(61, "PCIE_CLKREQ5_N"),
 PINCTRL_PIN(62, "PCIE_CLKREQ6_N"),
 PINCTRL_PIN(63, "PCIE_CLKREQ7_N"),
 PINCTRL_PIN(64, "UART0_RXD"),
 PINCTRL_PIN(65, "UART0_TXD"),
 PINCTRL_PIN(66, "CPU_RESET_N"),
 PINCTRL_PIN(67, "NMI"),
 PINCTRL_PIN(68, "ERROR2_N"),
 PINCTRL_PIN(69, "ERROR1_N"),
 PINCTRL_PIN(70, "ERROR0_N"),
 PINCTRL_PIN(71, "IERR_N"),
 PINCTRL_PIN(72, "MCERR_N"),
 PINCTRL_PIN(73, "SMB0_LEG_CLK"),
 PINCTRL_PIN(74, "SMB0_LEG_DATA"),
 PINCTRL_PIN(75, "SMB0_LEG_ALRT_N"),
 PINCTRL_PIN(76, "SMB1_HOST_DATA"),
 PINCTRL_PIN(77, "SMB1_HOST_CLK"),
 PINCTRL_PIN(78, "SMB2_PECI_DATA"),
 PINCTRL_PIN(79, "SMB2_PECI_CLK"),
 PINCTRL_PIN(80, "SMB4_CSME0_DATA"),
 PINCTRL_PIN(81, "SMB4_CSME0_CLK"),
 PINCTRL_PIN(82, "SMB4_CSME0_ALRT_N"),
 PINCTRL_PIN(83, "USB_OC0_N"),
 PINCTRL_PIN(84, "FLEX_CLK_SE0"),
 PINCTRL_PIN(85, "FLEX_CLK_SE1"),
 PINCTRL_PIN(86, "SPARE_4"),
 PINCTRL_PIN(87, "SMB3_IE0_CLK"),
 PINCTRL_PIN(88, "SMB3_IE0_DATA"),
 PINCTRL_PIN(89, "SMB3_IE0_ALRT_N"),
 PINCTRL_PIN(90, "SATA0_LED_N"),
 PINCTRL_PIN(91, "SATA1_LED_N"),
 PINCTRL_PIN(92, "SATA_PDETECT0"),
 PINCTRL_PIN(93, "SATA_PDETECT1"),
 PINCTRL_PIN(94, "UART1_RTS"),
 PINCTRL_PIN(95, "UART1_CTS"),
 PINCTRL_PIN(96, "UART1_RXD"),
 PINCTRL_PIN(97, "UART1_TXD"),
 PINCTRL_PIN(98, "SPARE_8"),
 PINCTRL_PIN(99, "SPARE_9"),
 PINCTRL_PIN(100, "TCK"),
 PINCTRL_PIN(101, "TRST_N"),
 PINCTRL_PIN(102, "TMS"),
 PINCTRL_PIN(103, "TDI"),
 PINCTRL_PIN(104, "TDO"),
 PINCTRL_PIN(105, "CX_PRDY_N"),
 PINCTRL_PIN(106, "CX_PREQ_N"),
 PINCTRL_PIN(107, "TAP1_TCK"),
 PINCTRL_PIN(108, "TAP1_TRST_N"),
 PINCTRL_PIN(109, "TAP1_TMS"),
 PINCTRL_PIN(110, "TAP1_TDI"),
 PINCTRL_PIN(111, "TAP1_TDO"),
 /* South GPP1 */
 PINCTRL_PIN(112, "SUSPWRDNACK"),
 PINCTRL_PIN(113, "PMU_SUSCLK"),
 PINCTRL_PIN(114, "ADR_TRIGGER"),
 PINCTRL_PIN(115, "PMU_SLP_S45_N"),
 PINCTRL_PIN(116, "PMU_SLP_S3_N"),
 PINCTRL_PIN(117, "PMU_WAKE_N"),
 PINCTRL_PIN(118, "PMU_PWRBTN_N"),
 PINCTRL_PIN(119, "PMU_RESETBUTTON_N"),
 PINCTRL_PIN(120, "PMU_PLTRST_N"),
 PINCTRL_PIN(121, "SUS_STAT_N"),
 PINCTRL_PIN(122, "SLP_S0IX_N"),
 PINCTRL_PIN(123, "SPI_CS0_N"),
 PINCTRL_PIN(124, "SPI_CS1_N"),
 PINCTRL_PIN(125, "SPI_MOSI_IO0"),
 PINCTRL_PIN(126, "SPI_MISO_IO1"),
 PINCTRL_PIN(127, "SPI_IO2"),
 PINCTRL_PIN(128, "SPI_IO3"),
 PINCTRL_PIN(129, "SPI_CLK"),
 PINCTRL_PIN(130, "SPI_CLK_LOOPBK"),
 PINCTRL_PIN(131, "ESPI_IO0"),
 PINCTRL_PIN(132, "ESPI_IO1"),
 PINCTRL_PIN(133, "ESPI_IO2"),
 PINCTRL_PIN(134, "ESPI_IO3"),
 PINCTRL_PIN(135, "ESPI_CS0_N"),
 PINCTRL_PIN(136, "ESPI_CLK"),
 PINCTRL_PIN(137, "ESPI_RST_N"),
 PINCTRL_PIN(138, "ESPI_ALRT0_N"),
 PINCTRL_PIN(139, "ESPI_CS1_N"),
 PINCTRL_PIN(140, "ESPI_ALRT1_N"),
 PINCTRL_PIN(141, "ESPI_CLK_LOOPBK"),
 PINCTRL_PIN(142, "EMMC_CMD"),
 PINCTRL_PIN(143, "EMMC_STROBE"),
 PINCTRL_PIN(144, "EMMC_CLK"),
 PINCTRL_PIN(145, "EMMC_D0"),
 PINCTRL_PIN(146, "EMMC_D1"),
 PINCTRL_PIN(147, "EMMC_D2"),
 PINCTRL_PIN(148, "EMMC_D3"),
 PINCTRL_PIN(149, "EMMC_D4"),
 PINCTRL_PIN(150, "EMMC_D5"),
 PINCTRL_PIN(151, "EMMC_D6"),
 PINCTRL_PIN(152, "EMMC_D7"),
 PINCTRL_PIN(153, "SPARE_3"),
};

static const unsigned int dnv_uart0_pins[] = { 60, 61, 64, 65 };
static const unsigned int dnv_uart0_modes[] = { 2, 3, 1, 1 };
static const unsigned int dnv_uart1_pins[] = { 94, 95, 96, 97 };
static const unsigned int dnv_uart2_pins[] = { 60, 61, 62, 63 };
static const unsigned int dnv_uart2_modes[] = { 1, 2, 2, 2 };
static const unsigned int dnv_emmc_pins[] = {
 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152,
};

static const struct intel_pingroup dnv_groups[] = {
 PIN_GROUP("uart0_grp", dnv_uart0_pins, dnv_uart0_modes),
 PIN_GROUP("uart1_grp", dnv_uart1_pins, 1),
 PIN_GROUP("uart2_grp", dnv_uart2_pins, dnv_uart2_modes),
 PIN_GROUP("emmc_grp", dnv_emmc_pins, 1),
};

static const char * const dnv_uart0_groups[] = { "uart0_grp" };
static const char * const dnv_uart1_groups[] = { "uart1_grp" };
static const char * const dnv_uart2_groups[] = { "uart2_grp" };
static const char * const dnv_emmc_groups[] = { "emmc_grp" };

static const struct intel_function dnv_functions[] = {
 FUNCTION("uart0", dnv_uart0_groups),
 FUNCTION("uart1", dnv_uart1_groups),
 FUNCTION("uart2", dnv_uart2_groups),
 FUNCTION("emmc", dnv_emmc_groups),
};

static const struct intel_padgroup dnv_north_gpps[] = {
 DNV_GPP(0, 0, 31), /* North ALL_0 */
 DNV_GPP(1, 32, 40), /* North ALL_1 */
};

static const struct intel_padgroup dnv_south_gpps[] = {
 DNV_GPP(0, 41, 58), /* South DFX */
 DNV_GPP(1, 59, 90), /* South GPP0_0 */
 DNV_GPP(2, 91, 111), /* South GPP0_1 */
 DNV_GPP(3, 112, 143), /* South GPP1_0 */
 DNV_GPP(4, 144, 153), /* South GPP1_1 */
};

static const struct intel_community dnv_communities[] = {
 DNV_COMMUNITY(0, 0, 40, dnv_north_gpps),
 DNV_COMMUNITY(1, 41, 153, dnv_south_gpps),
};

static const struct intel_pinctrl_soc_data dnv_soc_data = {
 .pins = dnv_pins,
 .npins = ARRAY_SIZE(dnv_pins),
 .groups = dnv_groups,
 .ngroups = ARRAY_SIZE(dnv_groups),
 .functions = dnv_functions,
 .nfunctions = ARRAY_SIZE(dnv_functions),
 .communities = dnv_communities,
 .ncommunities = ARRAY_SIZE(dnv_communities),
};

static const struct acpi_device_id dnv_pinctrl_acpi_match[] = {
 { "INTC3000", (kernel_ulong_t)&dnv_soc_data },
 { }
};
MODULE_DEVICE_TABLE(acpi, dnv_pinctrl_acpi_match);

static const struct platform_device_id dnv_pinctrl_platform_ids[] = {
 { "denverton-pinctrl", (kernel_ulong_t)&dnv_soc_data },
 { }
};
MODULE_DEVICE_TABLE(platform, dnv_pinctrl_platform_ids);

static struct platform_driver dnv_pinctrl_driver = {
 .probe = intel_pinctrl_probe_by_hid,
 .driver = {
  .name = "denverton-pinctrl",
  .acpi_match_table = dnv_pinctrl_acpi_match,
  .pm = pm_sleep_ptr(&intel_pinctrl_pm_ops),
 },
 .id_table = dnv_pinctrl_platform_ids,
};

static int __init dnv_pinctrl_init(void)
{
 return platform_driver_register(&dnv_pinctrl_driver);
}
subsys_initcall(dnv_pinctrl_init);

static void __exit dnv_pinctrl_exit(void)
{
 platform_driver_unregister(&dnv_pinctrl_driver);
}
module_exit(dnv_pinctrl_exit);

MODULE_AUTHOR("Mika Westerberg ");
MODULE_DESCRIPTION("Intel Denverton SoC pinctrl/GPIO driver");
MODULE_LICENSE("GPL v2");
MODULE_IMPORT_NS("PINCTRL_INTEL");

Messung V0.5
C=93 H=97 G=94

¤ Dauer der Verarbeitung: 0.5 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.