mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-06 02:50:49 +09:00
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:
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user