drivers/staging/greybus/audio_apbridgea.c
Source file repositories/reference/linux-study-clean/drivers/staging/greybus/audio_apbridgea.c
File Facts
- System
- Linux kernel
- Corpus path
drivers/staging/greybus/audio_apbridgea.c- Extension
.c- Size
- 6142 bytes
- Lines
- 206
- Domain
- Driver Families
- Bucket
- drivers/staging
- Inferred role
- Driver Families: exported/initcall integration point
- Status
- integration implementation candidate
Why This File Exists
Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Repeatable hardware-adapter layer. Deep compatibility for every driver is out of scope; this atlas records patterns, probe lifecycles, bus glue, IRQ/DMA usage, and links back to core abstractions.
- Exports symbols or registers init work; inspect boot/module ordering and who consumes the exported contract.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/greybus.haudio_apbridgea.haudio_codec.h
Detected Declarations
function gb_audio_apbridgea_set_configfunction gb_audio_apbridgea_register_cportfunction gb_audio_apbridgea_unregister_cportfunction gb_audio_apbridgea_set_tx_data_sizefunction gb_audio_apbridgea_prepare_txfunction gb_audio_apbridgea_start_txfunction gb_audio_apbridgea_stop_txfunction gb_audio_apbridgea_shutdown_txfunction gb_audio_apbridgea_set_rx_data_sizefunction gb_audio_apbridgea_prepare_rxfunction gb_audio_apbridgea_start_rxfunction gb_audio_apbridgea_stop_rxfunction gb_audio_apbridgea_shutdown_rxexport gb_audio_apbridgea_set_configexport gb_audio_apbridgea_register_cportexport gb_audio_apbridgea_unregister_cportexport gb_audio_apbridgea_set_tx_data_sizeexport gb_audio_apbridgea_prepare_txexport gb_audio_apbridgea_start_txexport gb_audio_apbridgea_stop_txexport gb_audio_apbridgea_shutdown_txexport gb_audio_apbridgea_set_rx_data_sizeexport gb_audio_apbridgea_prepare_rxexport gb_audio_apbridgea_start_rxexport gb_audio_apbridgea_stop_rxexport gb_audio_apbridgea_shutdown_rx
Annotated Snippet
// SPDX-License-Identifier: GPL-2.0
/*
* Greybus Audio Device Class Protocol helpers
*
* Copyright 2015-2016 Google Inc.
*/
#include <linux/greybus.h>
#include "audio_apbridgea.h"
#include "audio_codec.h"
int gb_audio_apbridgea_set_config(struct gb_connection *connection,
__u16 i2s_port, __u32 format, __u32 rate,
__u32 mclk_freq)
{
struct audio_apbridgea_set_config_request req;
req.hdr.type = AUDIO_APBRIDGEA_TYPE_SET_CONFIG;
req.hdr.i2s_port = cpu_to_le16(i2s_port);
req.format = cpu_to_le32(format);
req.rate = cpu_to_le32(rate);
req.mclk_freq = cpu_to_le32(mclk_freq);
return gb_hd_output(connection->hd, &req, sizeof(req),
GB_APB_REQUEST_AUDIO_CONTROL, true);
}
EXPORT_SYMBOL_GPL(gb_audio_apbridgea_set_config);
int gb_audio_apbridgea_register_cport(struct gb_connection *connection,
__u16 i2s_port, __u16 cportid,
__u8 direction)
{
struct audio_apbridgea_register_cport_request req;
int ret;
req.hdr.type = AUDIO_APBRIDGEA_TYPE_REGISTER_CPORT;
req.hdr.i2s_port = cpu_to_le16(i2s_port);
req.cport = cpu_to_le16(cportid);
req.direction = direction;
ret = gb_pm_runtime_get_sync(connection->bundle);
if (ret)
return ret;
return gb_hd_output(connection->hd, &req, sizeof(req),
GB_APB_REQUEST_AUDIO_CONTROL, true);
}
EXPORT_SYMBOL_GPL(gb_audio_apbridgea_register_cport);
int gb_audio_apbridgea_unregister_cport(struct gb_connection *connection,
__u16 i2s_port, __u16 cportid,
__u8 direction)
{
struct audio_apbridgea_unregister_cport_request req;
int ret;
req.hdr.type = AUDIO_APBRIDGEA_TYPE_UNREGISTER_CPORT;
req.hdr.i2s_port = cpu_to_le16(i2s_port);
req.cport = cpu_to_le16(cportid);
req.direction = direction;
ret = gb_hd_output(connection->hd, &req, sizeof(req),
GB_APB_REQUEST_AUDIO_CONTROL, true);
gb_pm_runtime_put_autosuspend(connection->bundle);
return ret;
}
EXPORT_SYMBOL_GPL(gb_audio_apbridgea_unregister_cport);
int gb_audio_apbridgea_set_tx_data_size(struct gb_connection *connection,
__u16 i2s_port, __u16 size)
{
struct audio_apbridgea_set_tx_data_size_request req;
req.hdr.type = AUDIO_APBRIDGEA_TYPE_SET_TX_DATA_SIZE;
req.hdr.i2s_port = cpu_to_le16(i2s_port);
req.size = cpu_to_le16(size);
return gb_hd_output(connection->hd, &req, sizeof(req),
GB_APB_REQUEST_AUDIO_CONTROL, true);
}
EXPORT_SYMBOL_GPL(gb_audio_apbridgea_set_tx_data_size);
int gb_audio_apbridgea_prepare_tx(struct gb_connection *connection,
__u16 i2s_port)
{
struct audio_apbridgea_prepare_tx_request req;
req.hdr.type = AUDIO_APBRIDGEA_TYPE_PREPARE_TX;
Annotation
- Immediate include surface: `linux/greybus.h`, `audio_apbridgea.h`, `audio_codec.h`.
- Detected declarations: `function gb_audio_apbridgea_set_config`, `function gb_audio_apbridgea_register_cport`, `function gb_audio_apbridgea_unregister_cport`, `function gb_audio_apbridgea_set_tx_data_size`, `function gb_audio_apbridgea_prepare_tx`, `function gb_audio_apbridgea_start_tx`, `function gb_audio_apbridgea_stop_tx`, `function gb_audio_apbridgea_shutdown_tx`, `function gb_audio_apbridgea_set_rx_data_size`, `function gb_audio_apbridgea_prepare_rx`.
- Atlas domain: Driver Families / drivers/staging.
- Implementation status: integration implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.