162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0-only */
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
462306a36Sopenharmony_ci */
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci#ifndef _DP_AUDIO_H_
762306a36Sopenharmony_ci#define _DP_AUDIO_H_
862306a36Sopenharmony_ci
962306a36Sopenharmony_ci#include <linux/platform_device.h>
1062306a36Sopenharmony_ci
1162306a36Sopenharmony_ci#include "dp_panel.h"
1262306a36Sopenharmony_ci#include "dp_catalog.h"
1362306a36Sopenharmony_ci#include <sound/hdmi-codec.h>
1462306a36Sopenharmony_ci
1562306a36Sopenharmony_ci/**
1662306a36Sopenharmony_ci * struct dp_audio
1762306a36Sopenharmony_ci * @lane_count: number of lanes configured in current session
1862306a36Sopenharmony_ci * @bw_code: link rate's bandwidth code for current session
1962306a36Sopenharmony_ci */
2062306a36Sopenharmony_cistruct dp_audio {
2162306a36Sopenharmony_ci	u32 lane_count;
2262306a36Sopenharmony_ci	u32 bw_code;
2362306a36Sopenharmony_ci};
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_ci/**
2662306a36Sopenharmony_ci * dp_audio_get()
2762306a36Sopenharmony_ci *
2862306a36Sopenharmony_ci * Creates and instance of dp audio.
2962306a36Sopenharmony_ci *
3062306a36Sopenharmony_ci * @pdev: caller's platform device instance.
3162306a36Sopenharmony_ci * @panel: an instance of dp_panel module.
3262306a36Sopenharmony_ci * @catalog: an instance of dp_catalog module.
3362306a36Sopenharmony_ci *
3462306a36Sopenharmony_ci * Returns the error code in case of failure, otherwize
3562306a36Sopenharmony_ci * an instance of newly created dp_module.
3662306a36Sopenharmony_ci */
3762306a36Sopenharmony_cistruct dp_audio *dp_audio_get(struct platform_device *pdev,
3862306a36Sopenharmony_ci			struct dp_panel *panel,
3962306a36Sopenharmony_ci			struct dp_catalog *catalog);
4062306a36Sopenharmony_ci
4162306a36Sopenharmony_ci/**
4262306a36Sopenharmony_ci * dp_register_audio_driver()
4362306a36Sopenharmony_ci *
4462306a36Sopenharmony_ci * Registers DP device with hdmi_codec interface.
4562306a36Sopenharmony_ci *
4662306a36Sopenharmony_ci * @dev: DP device instance.
4762306a36Sopenharmony_ci * @dp_audio: an instance of dp_audio module.
4862306a36Sopenharmony_ci *
4962306a36Sopenharmony_ci *
5062306a36Sopenharmony_ci * Returns the error code in case of failure, otherwise
5162306a36Sopenharmony_ci * zero on success.
5262306a36Sopenharmony_ci */
5362306a36Sopenharmony_ciint dp_register_audio_driver(struct device *dev,
5462306a36Sopenharmony_ci		struct dp_audio *dp_audio);
5562306a36Sopenharmony_ci
5662306a36Sopenharmony_civoid dp_unregister_audio_driver(struct device *dev, struct dp_audio *dp_audio);
5762306a36Sopenharmony_ci
5862306a36Sopenharmony_ci/**
5962306a36Sopenharmony_ci * dp_audio_put()
6062306a36Sopenharmony_ci *
6162306a36Sopenharmony_ci * Cleans the dp_audio instance.
6262306a36Sopenharmony_ci *
6362306a36Sopenharmony_ci * @dp_audio: an instance of dp_audio.
6462306a36Sopenharmony_ci */
6562306a36Sopenharmony_civoid dp_audio_put(struct dp_audio *dp_audio);
6662306a36Sopenharmony_ci
6762306a36Sopenharmony_ciint dp_audio_hw_params(struct device *dev,
6862306a36Sopenharmony_ci	void *data,
6962306a36Sopenharmony_ci	struct hdmi_codec_daifmt *daifmt,
7062306a36Sopenharmony_ci	struct hdmi_codec_params *params);
7162306a36Sopenharmony_ci
7262306a36Sopenharmony_ci#endif /* _DP_AUDIO_H_ */
7362306a36Sopenharmony_ci
7462306a36Sopenharmony_ci
75