18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Copyright (C) 2003 Russell King, All Rights Reserved. 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * This driver supports the following PXA CPU/SSP ports:- 68c2ecf20Sopenharmony_ci * 78c2ecf20Sopenharmony_ci * PXA250 SSP 88c2ecf20Sopenharmony_ci * PXA255 SSP, NSSP 98c2ecf20Sopenharmony_ci * PXA26x SSP, NSSP, ASSP 108c2ecf20Sopenharmony_ci * PXA27x SSP1, SSP2, SSP3 118c2ecf20Sopenharmony_ci * PXA3xx SSP1, SSP2, SSP3, SSP4 128c2ecf20Sopenharmony_ci */ 138c2ecf20Sopenharmony_ci 148c2ecf20Sopenharmony_ci#ifndef __LINUX_SSP_H 158c2ecf20Sopenharmony_ci#define __LINUX_SSP_H 168c2ecf20Sopenharmony_ci 178c2ecf20Sopenharmony_ci#include <linux/bits.h> 188c2ecf20Sopenharmony_ci#include <linux/compiler_types.h> 198c2ecf20Sopenharmony_ci#include <linux/io.h> 208c2ecf20Sopenharmony_ci#include <linux/kconfig.h> 218c2ecf20Sopenharmony_ci#include <linux/list.h> 228c2ecf20Sopenharmony_ci#include <linux/types.h> 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_cistruct clk; 258c2ecf20Sopenharmony_cistruct device; 268c2ecf20Sopenharmony_cistruct device_node; 278c2ecf20Sopenharmony_ci 288c2ecf20Sopenharmony_ci/* 298c2ecf20Sopenharmony_ci * SSP Serial Port Registers 308c2ecf20Sopenharmony_ci * PXA250, PXA255, PXA26x and PXA27x SSP controllers are all slightly different. 318c2ecf20Sopenharmony_ci * PXA255, PXA26x and PXA27x have extra ports, registers and bits. 328c2ecf20Sopenharmony_ci */ 338c2ecf20Sopenharmony_ci 348c2ecf20Sopenharmony_ci#define SSCR0 (0x00) /* SSP Control Register 0 */ 358c2ecf20Sopenharmony_ci#define SSCR1 (0x04) /* SSP Control Register 1 */ 368c2ecf20Sopenharmony_ci#define SSSR (0x08) /* SSP Status Register */ 378c2ecf20Sopenharmony_ci#define SSITR (0x0C) /* SSP Interrupt Test Register */ 388c2ecf20Sopenharmony_ci#define SSDR (0x10) /* SSP Data Write/Data Read Register */ 398c2ecf20Sopenharmony_ci 408c2ecf20Sopenharmony_ci#define SSTO (0x28) /* SSP Time Out Register */ 418c2ecf20Sopenharmony_ci#define DDS_RATE (0x28) /* SSP DDS Clock Rate Register (Intel Quark) */ 428c2ecf20Sopenharmony_ci#define SSPSP (0x2C) /* SSP Programmable Serial Protocol */ 438c2ecf20Sopenharmony_ci#define SSTSA (0x30) /* SSP Tx Timeslot Active */ 448c2ecf20Sopenharmony_ci#define SSRSA (0x34) /* SSP Rx Timeslot Active */ 458c2ecf20Sopenharmony_ci#define SSTSS (0x38) /* SSP Timeslot Status */ 468c2ecf20Sopenharmony_ci#define SSACD (0x3C) /* SSP Audio Clock Divider */ 478c2ecf20Sopenharmony_ci#define SSACDD (0x40) /* SSP Audio Clock Dither Divider */ 488c2ecf20Sopenharmony_ci 498c2ecf20Sopenharmony_ci/* Common PXA2xx bits first */ 508c2ecf20Sopenharmony_ci#define SSCR0_DSS GENMASK(3, 0) /* Data Size Select (mask) */ 518c2ecf20Sopenharmony_ci#define SSCR0_DataSize(x) ((x) - 1) /* Data Size Select [4..16] */ 528c2ecf20Sopenharmony_ci#define SSCR0_FRF GENMASK(5, 4) /* FRame Format (mask) */ 538c2ecf20Sopenharmony_ci#define SSCR0_Motorola (0x0 << 4) /* Motorola's Serial Peripheral Interface (SPI) */ 548c2ecf20Sopenharmony_ci#define SSCR0_TI (0x1 << 4) /* Texas Instruments' Synchronous Serial Protocol (SSP) */ 558c2ecf20Sopenharmony_ci#define SSCR0_National (0x2 << 4) /* National Microwire */ 568c2ecf20Sopenharmony_ci#define SSCR0_ECS BIT(6) /* External clock select */ 578c2ecf20Sopenharmony_ci#define SSCR0_SSE BIT(7) /* Synchronous Serial Port Enable */ 588c2ecf20Sopenharmony_ci#define SSCR0_SCR(x) ((x) << 8) /* Serial Clock Rate (mask) */ 598c2ecf20Sopenharmony_ci 608c2ecf20Sopenharmony_ci/* PXA27x, PXA3xx */ 618c2ecf20Sopenharmony_ci#define SSCR0_EDSS BIT(20) /* Extended data size select */ 628c2ecf20Sopenharmony_ci#define SSCR0_NCS BIT(21) /* Network clock select */ 638c2ecf20Sopenharmony_ci#define SSCR0_RIM BIT(22) /* Receive FIFO overrrun interrupt mask */ 648c2ecf20Sopenharmony_ci#define SSCR0_TUM BIT(23) /* Transmit FIFO underrun interrupt mask */ 658c2ecf20Sopenharmony_ci#define SSCR0_FRDC GENMASK(26, 24) /* Frame rate divider control (mask) */ 668c2ecf20Sopenharmony_ci#define SSCR0_SlotsPerFrm(x) (((x) - 1) << 24) /* Time slots per frame [1..8] */ 678c2ecf20Sopenharmony_ci#define SSCR0_FPCKE BIT(29) /* FIFO packing enable */ 688c2ecf20Sopenharmony_ci#define SSCR0_ACS BIT(30) /* Audio clock select */ 698c2ecf20Sopenharmony_ci#define SSCR0_MOD BIT(31) /* Mode (normal or network) */ 708c2ecf20Sopenharmony_ci 718c2ecf20Sopenharmony_ci#define SSCR1_RIE BIT(0) /* Receive FIFO Interrupt Enable */ 728c2ecf20Sopenharmony_ci#define SSCR1_TIE BIT(1) /* Transmit FIFO Interrupt Enable */ 738c2ecf20Sopenharmony_ci#define SSCR1_LBM BIT(2) /* Loop-Back Mode */ 748c2ecf20Sopenharmony_ci#define SSCR1_SPO BIT(3) /* Motorola SPI SSPSCLK polarity setting */ 758c2ecf20Sopenharmony_ci#define SSCR1_SPH BIT(4) /* Motorola SPI SSPSCLK phase setting */ 768c2ecf20Sopenharmony_ci#define SSCR1_MWDS BIT(5) /* Microwire Transmit Data Size */ 778c2ecf20Sopenharmony_ci 788c2ecf20Sopenharmony_ci#define SSSR_ALT_FRM_MASK GENMASK(1, 0) /* Masks the SFRM signal number */ 798c2ecf20Sopenharmony_ci#define SSSR_TNF BIT(2) /* Transmit FIFO Not Full */ 808c2ecf20Sopenharmony_ci#define SSSR_RNE BIT(3) /* Receive FIFO Not Empty */ 818c2ecf20Sopenharmony_ci#define SSSR_BSY BIT(4) /* SSP Busy */ 828c2ecf20Sopenharmony_ci#define SSSR_TFS BIT(5) /* Transmit FIFO Service Request */ 838c2ecf20Sopenharmony_ci#define SSSR_RFS BIT(6) /* Receive FIFO Service Request */ 848c2ecf20Sopenharmony_ci#define SSSR_ROR BIT(7) /* Receive FIFO Overrun */ 858c2ecf20Sopenharmony_ci 868c2ecf20Sopenharmony_ci#define RX_THRESH_DFLT 8 878c2ecf20Sopenharmony_ci#define TX_THRESH_DFLT 8 888c2ecf20Sopenharmony_ci 898c2ecf20Sopenharmony_ci#define SSSR_TFL_MASK GENMASK(11, 8) /* Transmit FIFO Level mask */ 908c2ecf20Sopenharmony_ci#define SSSR_RFL_MASK GENMASK(15, 12) /* Receive FIFO Level mask */ 918c2ecf20Sopenharmony_ci 928c2ecf20Sopenharmony_ci#define SSCR1_TFT GENMASK(9, 6) /* Transmit FIFO Threshold (mask) */ 938c2ecf20Sopenharmony_ci#define SSCR1_TxTresh(x) (((x) - 1) << 6) /* level [1..16] */ 948c2ecf20Sopenharmony_ci#define SSCR1_RFT GENMASK(13, 10) /* Receive FIFO Threshold (mask) */ 958c2ecf20Sopenharmony_ci#define SSCR1_RxTresh(x) (((x) - 1) << 10) /* level [1..16] */ 968c2ecf20Sopenharmony_ci 978c2ecf20Sopenharmony_ci#define RX_THRESH_CE4100_DFLT 2 988c2ecf20Sopenharmony_ci#define TX_THRESH_CE4100_DFLT 2 998c2ecf20Sopenharmony_ci 1008c2ecf20Sopenharmony_ci#define CE4100_SSSR_TFL_MASK GENMASK(9, 8) /* Transmit FIFO Level mask */ 1018c2ecf20Sopenharmony_ci#define CE4100_SSSR_RFL_MASK GENMASK(13, 12) /* Receive FIFO Level mask */ 1028c2ecf20Sopenharmony_ci 1038c2ecf20Sopenharmony_ci#define CE4100_SSCR1_TFT GENMASK(7, 6) /* Transmit FIFO Threshold (mask) */ 1048c2ecf20Sopenharmony_ci#define CE4100_SSCR1_TxTresh(x) (((x) - 1) << 6) /* level [1..4] */ 1058c2ecf20Sopenharmony_ci#define CE4100_SSCR1_RFT GENMASK(11, 10) /* Receive FIFO Threshold (mask) */ 1068c2ecf20Sopenharmony_ci#define CE4100_SSCR1_RxTresh(x) (((x) - 1) << 10) /* level [1..4] */ 1078c2ecf20Sopenharmony_ci 1088c2ecf20Sopenharmony_ci/* QUARK_X1000 SSCR0 bit definition */ 1098c2ecf20Sopenharmony_ci#define QUARK_X1000_SSCR0_DSS GENMASK(4, 0) /* Data Size Select (mask) */ 1108c2ecf20Sopenharmony_ci#define QUARK_X1000_SSCR0_DataSize(x) ((x) - 1) /* Data Size Select [4..32] */ 1118c2ecf20Sopenharmony_ci#define QUARK_X1000_SSCR0_FRF GENMASK(6, 5) /* FRame Format (mask) */ 1128c2ecf20Sopenharmony_ci#define QUARK_X1000_SSCR0_Motorola (0x0 << 5) /* Motorola's Serial Peripheral Interface (SPI) */ 1138c2ecf20Sopenharmony_ci 1148c2ecf20Sopenharmony_ci#define RX_THRESH_QUARK_X1000_DFLT 1 1158c2ecf20Sopenharmony_ci#define TX_THRESH_QUARK_X1000_DFLT 16 1168c2ecf20Sopenharmony_ci 1178c2ecf20Sopenharmony_ci#define QUARK_X1000_SSSR_TFL_MASK GENMASK(12, 8) /* Transmit FIFO Level mask */ 1188c2ecf20Sopenharmony_ci#define QUARK_X1000_SSSR_RFL_MASK GENMASK(17, 13) /* Receive FIFO Level mask */ 1198c2ecf20Sopenharmony_ci 1208c2ecf20Sopenharmony_ci#define QUARK_X1000_SSCR1_TFT GENMASK(10, 6) /* Transmit FIFO Threshold (mask) */ 1218c2ecf20Sopenharmony_ci#define QUARK_X1000_SSCR1_TxTresh(x) (((x) - 1) << 6) /* level [1..32] */ 1228c2ecf20Sopenharmony_ci#define QUARK_X1000_SSCR1_RFT GENMASK(15, 11) /* Receive FIFO Threshold (mask) */ 1238c2ecf20Sopenharmony_ci#define QUARK_X1000_SSCR1_RxTresh(x) (((x) - 1) << 11) /* level [1..32] */ 1248c2ecf20Sopenharmony_ci#define QUARK_X1000_SSCR1_EFWR BIT(16) /* Enable FIFO Write/Read */ 1258c2ecf20Sopenharmony_ci#define QUARK_X1000_SSCR1_STRF BIT(17) /* Select FIFO or EFWR */ 1268c2ecf20Sopenharmony_ci 1278c2ecf20Sopenharmony_ci/* extra bits in PXA255, PXA26x and PXA27x SSP ports */ 1288c2ecf20Sopenharmony_ci#define SSCR0_TISSP (1 << 4) /* TI Sync Serial Protocol */ 1298c2ecf20Sopenharmony_ci#define SSCR0_PSP (3 << 4) /* PSP - Programmable Serial Protocol */ 1308c2ecf20Sopenharmony_ci 1318c2ecf20Sopenharmony_ci#define SSCR1_EFWR BIT(14) /* Enable FIFO Write/Read */ 1328c2ecf20Sopenharmony_ci#define SSCR1_STRF BIT(15) /* Select FIFO or EFWR */ 1338c2ecf20Sopenharmony_ci#define SSCR1_IFS BIT(16) /* Invert Frame Signal */ 1348c2ecf20Sopenharmony_ci#define SSCR1_PINTE BIT(18) /* Peripheral Trailing Byte Interrupt Enable */ 1358c2ecf20Sopenharmony_ci#define SSCR1_TINTE BIT(19) /* Receiver Time-out Interrupt enable */ 1368c2ecf20Sopenharmony_ci#define SSCR1_RSRE BIT(20) /* Receive Service Request Enable */ 1378c2ecf20Sopenharmony_ci#define SSCR1_TSRE BIT(21) /* Transmit Service Request Enable */ 1388c2ecf20Sopenharmony_ci#define SSCR1_TRAIL BIT(22) /* Trailing Byte */ 1398c2ecf20Sopenharmony_ci#define SSCR1_RWOT BIT(23) /* Receive Without Transmit */ 1408c2ecf20Sopenharmony_ci#define SSCR1_SFRMDIR BIT(24) /* Frame Direction */ 1418c2ecf20Sopenharmony_ci#define SSCR1_SCLKDIR BIT(25) /* Serial Bit Rate Clock Direction */ 1428c2ecf20Sopenharmony_ci#define SSCR1_ECRB BIT(26) /* Enable Clock request B */ 1438c2ecf20Sopenharmony_ci#define SSCR1_ECRA BIT(27) /* Enable Clock Request A */ 1448c2ecf20Sopenharmony_ci#define SSCR1_SCFR BIT(28) /* Slave Clock free Running */ 1458c2ecf20Sopenharmony_ci#define SSCR1_EBCEI BIT(29) /* Enable Bit Count Error interrupt */ 1468c2ecf20Sopenharmony_ci#define SSCR1_TTE BIT(30) /* TXD Tristate Enable */ 1478c2ecf20Sopenharmony_ci#define SSCR1_TTELP BIT(31) /* TXD Tristate Enable Last Phase */ 1488c2ecf20Sopenharmony_ci 1498c2ecf20Sopenharmony_ci#define SSSR_PINT BIT(18) /* Peripheral Trailing Byte Interrupt */ 1508c2ecf20Sopenharmony_ci#define SSSR_TINT BIT(19) /* Receiver Time-out Interrupt */ 1518c2ecf20Sopenharmony_ci#define SSSR_EOC BIT(20) /* End Of Chain */ 1528c2ecf20Sopenharmony_ci#define SSSR_TUR BIT(21) /* Transmit FIFO Under Run */ 1538c2ecf20Sopenharmony_ci#define SSSR_CSS BIT(22) /* Clock Synchronisation Status */ 1548c2ecf20Sopenharmony_ci#define SSSR_BCE BIT(23) /* Bit Count Error */ 1558c2ecf20Sopenharmony_ci 1568c2ecf20Sopenharmony_ci#define SSPSP_SCMODE(x) ((x) << 0) /* Serial Bit Rate Clock Mode */ 1578c2ecf20Sopenharmony_ci#define SSPSP_SFRMP BIT(2) /* Serial Frame Polarity */ 1588c2ecf20Sopenharmony_ci#define SSPSP_ETDS BIT(3) /* End of Transfer data State */ 1598c2ecf20Sopenharmony_ci#define SSPSP_STRTDLY(x) ((x) << 4) /* Start Delay */ 1608c2ecf20Sopenharmony_ci#define SSPSP_DMYSTRT(x) ((x) << 7) /* Dummy Start */ 1618c2ecf20Sopenharmony_ci#define SSPSP_SFRMDLY(x) ((x) << 9) /* Serial Frame Delay */ 1628c2ecf20Sopenharmony_ci#define SSPSP_SFRMWDTH(x) ((x) << 16) /* Serial Frame Width */ 1638c2ecf20Sopenharmony_ci#define SSPSP_DMYSTOP(x) ((x) << 23) /* Dummy Stop */ 1648c2ecf20Sopenharmony_ci#define SSPSP_FSRT BIT(25) /* Frame Sync Relative Timing */ 1658c2ecf20Sopenharmony_ci 1668c2ecf20Sopenharmony_ci/* PXA3xx */ 1678c2ecf20Sopenharmony_ci#define SSPSP_EDMYSTRT(x) ((x) << 26) /* Extended Dummy Start */ 1688c2ecf20Sopenharmony_ci#define SSPSP_EDMYSTOP(x) ((x) << 28) /* Extended Dummy Stop */ 1698c2ecf20Sopenharmony_ci#define SSPSP_TIMING_MASK (0x7f8001f0) 1708c2ecf20Sopenharmony_ci 1718c2ecf20Sopenharmony_ci#define SSACD_ACDS(x) ((x) << 0) /* Audio clock divider select */ 1728c2ecf20Sopenharmony_ci#define SSACD_ACDS_1 (0) 1738c2ecf20Sopenharmony_ci#define SSACD_ACDS_2 (1) 1748c2ecf20Sopenharmony_ci#define SSACD_ACDS_4 (2) 1758c2ecf20Sopenharmony_ci#define SSACD_ACDS_8 (3) 1768c2ecf20Sopenharmony_ci#define SSACD_ACDS_16 (4) 1778c2ecf20Sopenharmony_ci#define SSACD_ACDS_32 (5) 1788c2ecf20Sopenharmony_ci#define SSACD_SCDB BIT(3) /* SSPSYSCLK Divider Bypass */ 1798c2ecf20Sopenharmony_ci#define SSACD_SCDB_4X (0) 1808c2ecf20Sopenharmony_ci#define SSACD_SCDB_1X (1) 1818c2ecf20Sopenharmony_ci#define SSACD_ACPS(x) ((x) << 4) /* Audio clock PLL select */ 1828c2ecf20Sopenharmony_ci#define SSACD_SCDX8 BIT(7) /* SYSCLK division ratio select */ 1838c2ecf20Sopenharmony_ci 1848c2ecf20Sopenharmony_ci/* LPSS SSP */ 1858c2ecf20Sopenharmony_ci#define SSITF 0x44 /* TX FIFO trigger level */ 1868c2ecf20Sopenharmony_ci#define SSITF_TxHiThresh(x) (((x) - 1) << 0) 1878c2ecf20Sopenharmony_ci#define SSITF_TxLoThresh(x) (((x) - 1) << 8) 1888c2ecf20Sopenharmony_ci 1898c2ecf20Sopenharmony_ci#define SSIRF 0x48 /* RX FIFO trigger level */ 1908c2ecf20Sopenharmony_ci#define SSIRF_RxThresh(x) ((x) - 1) 1918c2ecf20Sopenharmony_ci 1928c2ecf20Sopenharmony_ci/* LPT/WPT SSP */ 1938c2ecf20Sopenharmony_ci#define SSCR2 (0x40) /* SSP Command / Status 2 */ 1948c2ecf20Sopenharmony_ci#define SSPSP2 (0x44) /* SSP Programmable Serial Protocol 2 */ 1958c2ecf20Sopenharmony_ci 1968c2ecf20Sopenharmony_cienum pxa_ssp_type { 1978c2ecf20Sopenharmony_ci SSP_UNDEFINED = 0, 1988c2ecf20Sopenharmony_ci PXA25x_SSP, /* pxa 210, 250, 255, 26x */ 1998c2ecf20Sopenharmony_ci PXA25x_NSSP, /* pxa 255, 26x (including ASSP) */ 2008c2ecf20Sopenharmony_ci PXA27x_SSP, 2018c2ecf20Sopenharmony_ci PXA3xx_SSP, 2028c2ecf20Sopenharmony_ci PXA168_SSP, 2038c2ecf20Sopenharmony_ci MMP2_SSP, 2048c2ecf20Sopenharmony_ci PXA910_SSP, 2058c2ecf20Sopenharmony_ci CE4100_SSP, 2068c2ecf20Sopenharmony_ci QUARK_X1000_SSP, 2078c2ecf20Sopenharmony_ci LPSS_LPT_SSP, /* Keep LPSS types sorted with lpss_platforms[] */ 2088c2ecf20Sopenharmony_ci LPSS_BYT_SSP, 2098c2ecf20Sopenharmony_ci LPSS_BSW_SSP, 2108c2ecf20Sopenharmony_ci LPSS_SPT_SSP, 2118c2ecf20Sopenharmony_ci LPSS_BXT_SSP, 2128c2ecf20Sopenharmony_ci LPSS_CNL_SSP, 2138c2ecf20Sopenharmony_ci}; 2148c2ecf20Sopenharmony_ci 2158c2ecf20Sopenharmony_cistruct ssp_device { 2168c2ecf20Sopenharmony_ci struct device *dev; 2178c2ecf20Sopenharmony_ci struct list_head node; 2188c2ecf20Sopenharmony_ci 2198c2ecf20Sopenharmony_ci struct clk *clk; 2208c2ecf20Sopenharmony_ci void __iomem *mmio_base; 2218c2ecf20Sopenharmony_ci unsigned long phys_base; 2228c2ecf20Sopenharmony_ci 2238c2ecf20Sopenharmony_ci const char *label; 2248c2ecf20Sopenharmony_ci int port_id; 2258c2ecf20Sopenharmony_ci enum pxa_ssp_type type; 2268c2ecf20Sopenharmony_ci int use_count; 2278c2ecf20Sopenharmony_ci int irq; 2288c2ecf20Sopenharmony_ci 2298c2ecf20Sopenharmony_ci struct device_node *of_node; 2308c2ecf20Sopenharmony_ci}; 2318c2ecf20Sopenharmony_ci 2328c2ecf20Sopenharmony_ci/** 2338c2ecf20Sopenharmony_ci * pxa_ssp_write_reg - Write to a SSP register 2348c2ecf20Sopenharmony_ci * 2358c2ecf20Sopenharmony_ci * @dev: SSP device to access 2368c2ecf20Sopenharmony_ci * @reg: Register to write to 2378c2ecf20Sopenharmony_ci * @val: Value to be written. 2388c2ecf20Sopenharmony_ci */ 2398c2ecf20Sopenharmony_cistatic inline void pxa_ssp_write_reg(struct ssp_device *dev, u32 reg, u32 val) 2408c2ecf20Sopenharmony_ci{ 2418c2ecf20Sopenharmony_ci __raw_writel(val, dev->mmio_base + reg); 2428c2ecf20Sopenharmony_ci} 2438c2ecf20Sopenharmony_ci 2448c2ecf20Sopenharmony_ci/** 2458c2ecf20Sopenharmony_ci * pxa_ssp_read_reg - Read from a SSP register 2468c2ecf20Sopenharmony_ci * 2478c2ecf20Sopenharmony_ci * @dev: SSP device to access 2488c2ecf20Sopenharmony_ci * @reg: Register to read from 2498c2ecf20Sopenharmony_ci */ 2508c2ecf20Sopenharmony_cistatic inline u32 pxa_ssp_read_reg(struct ssp_device *dev, u32 reg) 2518c2ecf20Sopenharmony_ci{ 2528c2ecf20Sopenharmony_ci return __raw_readl(dev->mmio_base + reg); 2538c2ecf20Sopenharmony_ci} 2548c2ecf20Sopenharmony_ci 2558c2ecf20Sopenharmony_ci#if IS_ENABLED(CONFIG_PXA_SSP) 2568c2ecf20Sopenharmony_cistruct ssp_device *pxa_ssp_request(int port, const char *label); 2578c2ecf20Sopenharmony_civoid pxa_ssp_free(struct ssp_device *); 2588c2ecf20Sopenharmony_cistruct ssp_device *pxa_ssp_request_of(const struct device_node *of_node, 2598c2ecf20Sopenharmony_ci const char *label); 2608c2ecf20Sopenharmony_ci#else 2618c2ecf20Sopenharmony_cistatic inline struct ssp_device *pxa_ssp_request(int port, const char *label) 2628c2ecf20Sopenharmony_ci{ 2638c2ecf20Sopenharmony_ci return NULL; 2648c2ecf20Sopenharmony_ci} 2658c2ecf20Sopenharmony_cistatic inline struct ssp_device *pxa_ssp_request_of(const struct device_node *n, 2668c2ecf20Sopenharmony_ci const char *name) 2678c2ecf20Sopenharmony_ci{ 2688c2ecf20Sopenharmony_ci return NULL; 2698c2ecf20Sopenharmony_ci} 2708c2ecf20Sopenharmony_cistatic inline void pxa_ssp_free(struct ssp_device *ssp) {} 2718c2ecf20Sopenharmony_ci#endif 2728c2ecf20Sopenharmony_ci 2738c2ecf20Sopenharmony_ci#endif 274