media: i2c: rk628: add attributes for enabling HDMI ARC

This patch adds attributes for enabling HDMI ARC.

Signed-off-by: Jason Zhang <jason.zhang@rock-chips.com>
Change-Id: Iec7e1169efc65f298e5b5449e3803151d91c7258
This commit is contained in:
Jason Zhang
2024-05-08 20:30:06 +08:00
parent 38e425f2a3
commit e5c8e1cc2f
3 changed files with 61 additions and 0 deletions

View File

@@ -3132,12 +3132,48 @@ static ssize_t audio_present_show(struct device *dev,
rk628_hdmirx_audio_present(csi->audio_info) : 0);
}
static ssize_t arc_enable_show(struct device *dev,
struct device_attribute *attr, char *buf)
{
struct rk628_csi *csi = dev_get_drvdata(dev);
struct rk_hdmirx_dev *hdmirx_dev = dev_get_drvdata(dev);
if (!hdmirx_dev)
return -EINVAL;
return snprintf(buf, PAGE_SIZE, "%d\n",
rk628_hdmirx_get_arc_enable(csi->audio_info) ? 1 : 0);
}
static ssize_t arc_enable_store(struct device *dev,
struct device_attribute *attr,
const char *buf, size_t count)
{
struct rk628_csi *csi = dev_get_drvdata(dev);
struct rk_hdmirx_dev *hdmirx_dev = dev_get_drvdata(dev);
bool enabled;
int ret;
if (!hdmirx_dev)
return -EINVAL;
ret = kstrtobool(buf, &enabled);
if (ret)
return ret;
rk628_hdmirx_set_arc_enable(csi->audio_info, enabled);
return count;
}
static DEVICE_ATTR_RO(audio_rate);
static DEVICE_ATTR_RO(audio_present);
static DEVICE_ATTR_RW(arc_enable);
static struct attribute *rk628_attrs[] = {
&dev_attr_audio_rate.attr,
&dev_attr_audio_present.attr,
&dev_attr_arc_enable.attr,
NULL
};
ATTRIBUTE_GROUPS(rk628);

View File

@@ -42,6 +42,7 @@ struct rk628_audioinfo {
bool fifo_ints_en;
bool ctsn_ints_en;
bool audio_present;
bool arc_en;
struct device *dev;
};
@@ -639,6 +640,28 @@ int rk628_hdmirx_audio_fs(HAUDINFO info)
}
EXPORT_SYMBOL(rk628_hdmirx_audio_fs);
bool rk628_hdmirx_get_arc_enable(HAUDINFO info)
{
struct rk628_audioinfo *aif = (struct rk628_audioinfo *)info;
if (!aif)
return false;
return aif->arc_en;
}
EXPORT_SYMBOL(rk628_hdmirx_get_arc_enable);
int rk628_hdmirx_set_arc_enable(HAUDINFO info, bool enabled)
{
struct rk628_audioinfo *aif = (struct rk628_audioinfo *)info;
if (!aif)
return false;
return aif->arc_en = enabled;
}
EXPORT_SYMBOL(rk628_hdmirx_set_arc_enable);
void rk628_hdmirx_audio_i2s_ctrl(HAUDINFO info, bool enable)
{
struct rk628_audioinfo *aif = (struct rk628_audioinfo *)info;

View File

@@ -504,6 +504,8 @@ void rk628_hdmirx_audio_cancel_work_rate_change(HAUDINFO info, bool sync);
bool rk628_hdmirx_audio_present(HAUDINFO info);
int rk628_hdmirx_audio_fs(HAUDINFO info);
void rk628_hdmirx_audio_i2s_ctrl(HAUDINFO info, bool enable);
bool rk628_hdmirx_get_arc_enable(HAUDINFO info);
int rk628_hdmirx_set_arc_enable(HAUDINFO info, bool enabled);
/* for audio isr process */
bool rk628_audio_fifoints_enabled(HAUDINFO info);