1d8f48fbdSVijendar Mukunda /* SPDX-License-Identifier: GPL-2.0+ */ 2d8f48fbdSVijendar Mukunda /* 3d8f48fbdSVijendar Mukunda * Copyright (C) 2023 Advanced Micro Devices, Inc. All rights reserved. 4d8f48fbdSVijendar Mukunda */ 5d8f48fbdSVijendar Mukunda 6d8f48fbdSVijendar Mukunda #ifndef __SDW_AMD_H 7d8f48fbdSVijendar Mukunda #define __SDW_AMD_H 8d8f48fbdSVijendar Mukunda 9d8f48fbdSVijendar Mukunda #include <linux/soundwire/sdw.h> 10d8f48fbdSVijendar Mukunda 11*81ff58ffSVijendar Mukunda /* AMD pm_runtime quirk definitions */ 12*81ff58ffSVijendar Mukunda 13*81ff58ffSVijendar Mukunda /* 14*81ff58ffSVijendar Mukunda * Force the clock to stop(ClockStopMode0) when suspend callback 15*81ff58ffSVijendar Mukunda * is invoked. 16*81ff58ffSVijendar Mukunda */ 17*81ff58ffSVijendar Mukunda #define AMD_SDW_CLK_STOP_MODE 1 18*81ff58ffSVijendar Mukunda 19*81ff58ffSVijendar Mukunda /* 20*81ff58ffSVijendar Mukunda * Stop the bus when runtime suspend/system level suspend callback 21*81ff58ffSVijendar Mukunda * is invoked. If set, a complete bus reset and re-enumeration will 22*81ff58ffSVijendar Mukunda * be performed when the bus restarts. In-band wake interrupts are 23*81ff58ffSVijendar Mukunda * not supported in this mode. 24*81ff58ffSVijendar Mukunda */ 25*81ff58ffSVijendar Mukunda #define AMD_SDW_POWER_OFF_MODE 2 26d8f48fbdSVijendar Mukunda #define ACP_SDW0 0 27d8f48fbdSVijendar Mukunda #define ACP_SDW1 1 28d8f48fbdSVijendar Mukunda 29d8f48fbdSVijendar Mukunda struct acp_sdw_pdata { 30d8f48fbdSVijendar Mukunda u16 instance; 31d8f48fbdSVijendar Mukunda /* mutex to protect acp common register access */ 32d8f48fbdSVijendar Mukunda struct mutex *acp_sdw_lock; 33d8f48fbdSVijendar Mukunda }; 34d8f48fbdSVijendar Mukunda 35d8f48fbdSVijendar Mukunda struct sdw_manager_reg_mask { 36d8f48fbdSVijendar Mukunda u32 sw_pad_enable_mask; 37d8f48fbdSVijendar Mukunda u32 sw_pad_pulldown_mask; 38d8f48fbdSVijendar Mukunda u32 acp_sdw_intr_mask; 39d8f48fbdSVijendar Mukunda }; 40d8f48fbdSVijendar Mukunda 41d8f48fbdSVijendar Mukunda /** 422b13596fSVijendar Mukunda * struct sdw_amd_dai_runtime: AMD sdw dai runtime data 432b13596fSVijendar Mukunda * 442b13596fSVijendar Mukunda * @name: SoundWire stream name 452b13596fSVijendar Mukunda * @stream: stream runtime 462b13596fSVijendar Mukunda * @bus: Bus handle 472b13596fSVijendar Mukunda * @stream_type: Stream type 482b13596fSVijendar Mukunda */ 492b13596fSVijendar Mukunda struct sdw_amd_dai_runtime { 502b13596fSVijendar Mukunda char *name; 512b13596fSVijendar Mukunda struct sdw_stream_runtime *stream; 522b13596fSVijendar Mukunda struct sdw_bus *bus; 532b13596fSVijendar Mukunda enum sdw_stream_type stream_type; 542b13596fSVijendar Mukunda }; 552b13596fSVijendar Mukunda 562b13596fSVijendar Mukunda /** 57d8f48fbdSVijendar Mukunda * struct amd_sdw_manager - amd manager driver context 58d8f48fbdSVijendar Mukunda * @bus: bus handle 59d8f48fbdSVijendar Mukunda * @dev: linux device 60d8f48fbdSVijendar Mukunda * @mmio: SoundWire registers mmio base 61d8f48fbdSVijendar Mukunda * @acp_mmio: acp registers mmio base 62d8f48fbdSVijendar Mukunda * @reg_mask: register mask structure per manager instance 6365f93e40SVijendar Mukunda * @amd_sdw_irq_thread: SoundWire manager irq workqueue 6465f93e40SVijendar Mukunda * @amd_sdw_work: peripheral status work queue 65d8f48fbdSVijendar Mukunda * @probe_work: SoundWire manager probe workqueue 66d8f48fbdSVijendar Mukunda * @acp_sdw_lock: mutex to protect acp share register access 6765f93e40SVijendar Mukunda * @status: peripheral devices status array 68d8f48fbdSVijendar Mukunda * @num_din_ports: number of input ports 69d8f48fbdSVijendar Mukunda * @num_dout_ports: number of output ports 70d8f48fbdSVijendar Mukunda * @cols_index: Column index in frame shape 71d8f48fbdSVijendar Mukunda * @rows_index: Rows index in frame shape 72d8f48fbdSVijendar Mukunda * @instance: SoundWire manager instance 73d8f48fbdSVijendar Mukunda * @quirks: SoundWire manager quirks 74d8f48fbdSVijendar Mukunda * @wake_en_mask: wake enable mask per SoundWire manager 75*81ff58ffSVijendar Mukunda * @clk_stopped: flag set to true when clock is stopped 76d8f48fbdSVijendar Mukunda * @power_mode_mask: flag interprets amd SoundWire manager power mode 772b13596fSVijendar Mukunda * @dai_runtime_array: dai runtime array 78d8f48fbdSVijendar Mukunda */ 79d8f48fbdSVijendar Mukunda struct amd_sdw_manager { 80d8f48fbdSVijendar Mukunda struct sdw_bus bus; 81d8f48fbdSVijendar Mukunda struct device *dev; 82d8f48fbdSVijendar Mukunda 83d8f48fbdSVijendar Mukunda void __iomem *mmio; 84d8f48fbdSVijendar Mukunda void __iomem *acp_mmio; 85d8f48fbdSVijendar Mukunda 86d8f48fbdSVijendar Mukunda struct sdw_manager_reg_mask *reg_mask; 8765f93e40SVijendar Mukunda struct work_struct amd_sdw_irq_thread; 8865f93e40SVijendar Mukunda struct work_struct amd_sdw_work; 89d8f48fbdSVijendar Mukunda struct work_struct probe_work; 90d8f48fbdSVijendar Mukunda /* mutex to protect acp common register access */ 91d8f48fbdSVijendar Mukunda struct mutex *acp_sdw_lock; 92d8f48fbdSVijendar Mukunda 9365f93e40SVijendar Mukunda enum sdw_slave_status status[SDW_MAX_DEVICES + 1]; 9465f93e40SVijendar Mukunda 95d8f48fbdSVijendar Mukunda int num_din_ports; 96d8f48fbdSVijendar Mukunda int num_dout_ports; 97d8f48fbdSVijendar Mukunda 98d8f48fbdSVijendar Mukunda int cols_index; 99d8f48fbdSVijendar Mukunda int rows_index; 100d8f48fbdSVijendar Mukunda 101d8f48fbdSVijendar Mukunda u32 instance; 102d8f48fbdSVijendar Mukunda u32 quirks; 103d8f48fbdSVijendar Mukunda u32 wake_en_mask; 104d8f48fbdSVijendar Mukunda u32 power_mode_mask; 105*81ff58ffSVijendar Mukunda bool clk_stopped; 1062b13596fSVijendar Mukunda 1072b13596fSVijendar Mukunda struct sdw_amd_dai_runtime **dai_runtime_array; 108d8f48fbdSVijendar Mukunda }; 109d8f48fbdSVijendar Mukunda #endif 110