mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2025-10-23 07:23:12 +02:00

- structure optimization of few bus structures and header updates - support for 2.0 disco spec - amd driver updates for acp revision, refactoring code and support for acp6.3 - soft reset support for cadence driver -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEE+vs47OPLdNbVcHzyfBQHDyUjg0cFAmdEgiMACgkQfBQHDyUj g0dVBA/+MWwHs+Sl7LMSmkpGsfAsmSbD2il+v+9WcVnaQpl/dgv8EXPGbafBBgK/ AlVUvLCNdbwY93wCb/2xdGPOJS699D7AtdJnUEppcL2VsMtEbgQxyG0OSekRVH0c NxVLNPVLQFQnZayh7MNflQNVrXJyEqUJg8n0G9G1KT7jTeMavejYhqmhN7TKNtLD vJzF79QFC2n7+f7jK9+d2pJlhW5V3XUyQCRF6FipftKbuZN+ciVh9kjnAf1GjPsi qpv7kRZ3ttZiYW+/8FjJxqChnT10b/ahRDwJTXE+uGhqxHD9Cjo/GYrzUtQQbDR2 uvZ6+o0UxhN3HR5Dq09FJYPluHpt8S/s/wZ0dj+dXlvPR82qT6LA9LP16BFwYj3S 36/DpGwJBYg3tsmwECKbY08t3aI1d8nXNKG0tXbkEU3RUWVeOJOLAyXbwYQ9DRGN k3RbTTEZiw223FlgAk9dzCI6mMuekdh20UWVH7iZwUl8ZvJhWNdWiZOV4uaUcGZS fmJ6JE7cM1ntv5rXjKIhhnTnoL5Z+3es3PjLxj8PE7VNC8Dlln67FF1NuoDd0uF0 jWA13iNUOKgytsx2jxAxWnU8S3SAPjB1+GD65ovMxH+b9xtgwhtmCcpySJaG4/Pn P7F7dx1+bK8gbmc5xJf8ZddYeDF/Nb/493trk+Sf+zZSs+hevRY= =3Ob7 -----END PGP SIGNATURE----- Merge tag 'soundwire-6.13-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/vkoul/soundwire Pull soundwire updates from Vinod Koul: - structure optimization of few bus structures and header updates - support for 2.0 disco spec - amd driver updates for acp revision, refactoring code and support for acp6.3 - soft reset support for cadence driver * tag 'soundwire-6.13-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/vkoul/soundwire: (24 commits) soundwire: Minor formatting fixups in sdw.h header soundwire: Update the includes on the sdw.h header soundwire: cadence: clear MCP BLOCK_WAKEUP in init soundwire: cadence: add soft-reset on startup soundwire: intel_auxdevice: add kernel parameter for mclk divider soundwire: mipi-disco: add support for DP0/DPn 'lane-list' property soundwire: mipi-disco: add new properties from 2.0 spec soundwire: mipi-disco: add comment on DP0-supported property soundwire: mipi-disco: add support for peripheral channelprepare timeout soundwire: mipi_disco: add support for clock-scales property soundwire: mipi-disco: add error handling for property array read soundwire: mipi-disco: remove DPn audio-modes soundwire: optimize sdw_dpn_prop soundwire: optimize sdw_dp0_prop soundwire: optimize sdw_slave_prop soundwire: optimize sdw_bus structure soundwire: optimize sdw_master_prop soundwire: optimize sdw_stream_runtime memory layout soundwire: mipi_disco: add MIPI-specific property_read_bool() helpers soundwire: Correct some typos in comments ...
172 lines
4.5 KiB
C
172 lines
4.5 KiB
C
/* SPDX-License-Identifier: (GPL-2.0 OR BSD-3-Clause) */
|
|
/*
|
|
* Copyright (C) 2023-24 Advanced Micro Devices, Inc. All rights reserved.
|
|
*/
|
|
|
|
#ifndef __SDW_AMD_H
|
|
#define __SDW_AMD_H
|
|
|
|
#include <linux/acpi.h>
|
|
#include <linux/soundwire/sdw.h>
|
|
|
|
/* AMD pm_runtime quirk definitions */
|
|
|
|
/*
|
|
* Force the clock to stop(ClockStopMode0) when suspend callback
|
|
* is invoked.
|
|
*/
|
|
#define AMD_SDW_CLK_STOP_MODE 1
|
|
|
|
/*
|
|
* Stop the bus when runtime suspend/system level suspend callback
|
|
* is invoked. If set, a complete bus reset and re-enumeration will
|
|
* be performed when the bus restarts. In-band wake interrupts are
|
|
* not supported in this mode.
|
|
*/
|
|
#define AMD_SDW_POWER_OFF_MODE 2
|
|
#define ACP_SDW0 0
|
|
#define ACP_SDW1 1
|
|
#define AMD_SDW_MAX_MANAGER_COUNT 2
|
|
#define ACP63_PCI_REV_ID 0x63
|
|
|
|
struct acp_sdw_pdata {
|
|
u16 instance;
|
|
u32 acp_rev;
|
|
/* mutex to protect acp common register access */
|
|
struct mutex *acp_sdw_lock;
|
|
};
|
|
|
|
/**
|
|
* struct sdw_amd_dai_runtime: AMD sdw dai runtime data
|
|
*
|
|
* @name: SoundWire stream name
|
|
* @stream: stream runtime
|
|
* @bus: Bus handle
|
|
* @stream_type: Stream type
|
|
*/
|
|
struct sdw_amd_dai_runtime {
|
|
char *name;
|
|
struct sdw_stream_runtime *stream;
|
|
struct sdw_bus *bus;
|
|
enum sdw_stream_type stream_type;
|
|
};
|
|
|
|
/**
|
|
* struct amd_sdw_manager - amd manager driver context
|
|
* @bus: bus handle
|
|
* @dev: linux device
|
|
* @mmio: SoundWire registers mmio base
|
|
* @acp_mmio: acp registers mmio base
|
|
* @amd_sdw_irq_thread: SoundWire manager irq workqueue
|
|
* @amd_sdw_work: peripheral status work queue
|
|
* @acp_sdw_lock: mutex to protect acp share register access
|
|
* @status: peripheral devices status array
|
|
* @num_din_ports: number of input ports
|
|
* @num_dout_ports: number of output ports
|
|
* @cols_index: Column index in frame shape
|
|
* @rows_index: Rows index in frame shape
|
|
* @instance: SoundWire manager instance
|
|
* @quirks: SoundWire manager quirks
|
|
* @wake_en_mask: wake enable mask per SoundWire manager
|
|
* @acp_rev: acp pci device revision id
|
|
* @clk_stopped: flag set to true when clock is stopped
|
|
* @power_mode_mask: flag interprets amd SoundWire manager power mode
|
|
* @dai_runtime_array: dai runtime array
|
|
*/
|
|
struct amd_sdw_manager {
|
|
struct sdw_bus bus;
|
|
struct device *dev;
|
|
|
|
void __iomem *mmio;
|
|
void __iomem *acp_mmio;
|
|
|
|
struct work_struct amd_sdw_irq_thread;
|
|
struct work_struct amd_sdw_work;
|
|
/* mutex to protect acp common register access */
|
|
struct mutex *acp_sdw_lock;
|
|
|
|
enum sdw_slave_status status[SDW_MAX_DEVICES + 1];
|
|
|
|
int num_din_ports;
|
|
int num_dout_ports;
|
|
|
|
int cols_index;
|
|
int rows_index;
|
|
|
|
u32 instance;
|
|
u32 quirks;
|
|
u32 wake_en_mask;
|
|
u32 power_mode_mask;
|
|
u32 acp_rev;
|
|
bool clk_stopped;
|
|
|
|
struct sdw_amd_dai_runtime **dai_runtime_array;
|
|
};
|
|
|
|
/**
|
|
* struct sdw_amd_acpi_info - Soundwire AMD information found in ACPI tables
|
|
* @handle: ACPI controller handle
|
|
* @count: maximum no of soundwire manager links supported on AMD platform.
|
|
* @link_mask: bit-wise mask listing links enabled by BIOS menu
|
|
*/
|
|
struct sdw_amd_acpi_info {
|
|
acpi_handle handle;
|
|
int count;
|
|
u32 link_mask;
|
|
};
|
|
|
|
/**
|
|
* struct sdw_amd_ctx - context allocated by the controller driver probe
|
|
*
|
|
* @count: link count
|
|
* @link_mask: bit-wise mask listing SoundWire links reported by the
|
|
* Controller
|
|
* @pdev: platform device structure
|
|
* @peripherals: array representing Peripherals exposed across all enabled links
|
|
*/
|
|
struct sdw_amd_ctx {
|
|
int count;
|
|
u32 link_mask;
|
|
struct platform_device *pdev[AMD_SDW_MAX_MANAGER_COUNT];
|
|
struct sdw_peripherals *peripherals;
|
|
};
|
|
|
|
/**
|
|
* struct sdw_amd_res - Soundwire AMD global resource structure,
|
|
* typically populated by the DSP driver/Legacy driver
|
|
*
|
|
* @acp_rev: acp pci device revision id
|
|
* @addr: acp pci device resource start address
|
|
* @reg_range: ACP register range
|
|
* @link_mask: bit-wise mask listing links selected by the DSP driver/
|
|
* legacy driver
|
|
* @count: link count
|
|
* @mmio_base: mmio base of SoundWire registers
|
|
* @handle: ACPI parent handle
|
|
* @parent: parent device
|
|
* @dev: device implementing hwparams and free callbacks
|
|
* @acp_lock: mutex protecting acp common registers access
|
|
*/
|
|
struct sdw_amd_res {
|
|
u32 acp_rev;
|
|
u32 addr;
|
|
u32 reg_range;
|
|
u32 link_mask;
|
|
int count;
|
|
void __iomem *mmio_base;
|
|
acpi_handle handle;
|
|
struct device *parent;
|
|
struct device *dev;
|
|
/* use to protect acp common registers access */
|
|
struct mutex *acp_lock;
|
|
};
|
|
|
|
int sdw_amd_probe(struct sdw_amd_res *res, struct sdw_amd_ctx **ctx);
|
|
|
|
void sdw_amd_exit(struct sdw_amd_ctx *ctx);
|
|
|
|
int sdw_amd_get_slave_info(struct sdw_amd_ctx *ctx);
|
|
|
|
int amd_sdw_scan_controller(struct sdw_amd_acpi_info *info);
|
|
#endif
|