mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 03:15:31 +09:00
media: i2c: it6616: create hdmirx_class devices
Signed-off-by: Shunhua Lan <lsh@rock-chips.com> Change-Id: I9e2cf3c8330504124931f79d111bfa3fb54462db
This commit is contained in:
@@ -351,6 +351,7 @@ config VIDEO_IT6616
|
||||
depends on VIDEO_V4L2 && I2C && VIDEO_V4L2_SUBDEV_API
|
||||
select HDMI
|
||||
select V4L2_FWNODE
|
||||
select VIDEO_ROCKCHIP_HDMIRX_CLASS
|
||||
help
|
||||
Support for the ITE IT6616 series HDMI to MIPI CSI-2 bridge.
|
||||
|
||||
|
||||
@@ -20,6 +20,7 @@
|
||||
#include <linux/module.h>
|
||||
#include <linux/of_graph.h>
|
||||
#include <linux/rk-camera-module.h>
|
||||
#include <linux/rk_hdmirx_class.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/timer.h>
|
||||
#include <linux/v4l2-dv-timings.h>
|
||||
@@ -471,7 +472,6 @@ struct it6616 {
|
||||
struct regmap *mipi_regmap;
|
||||
struct regmap *edid_regmap;
|
||||
u8 attr_hdmi_reg_bank;
|
||||
struct class *hdmirx_class;
|
||||
struct device *dev;
|
||||
struct device *classdev;
|
||||
struct v4l2_fwnode_bus_mipi_csi2 bus;
|
||||
@@ -4222,54 +4222,29 @@ static ssize_t audio_rate_show(struct device *dev,
|
||||
static DEVICE_ATTR_RO(audio_present);
|
||||
static DEVICE_ATTR_RO(audio_rate);
|
||||
|
||||
static struct attribute *it6616_audio_attrs[] = {
|
||||
&dev_attr_audio_rate.attr,
|
||||
&dev_attr_audio_present.attr,
|
||||
NULL
|
||||
};
|
||||
ATTRIBUTE_GROUPS(it6616_audio);
|
||||
|
||||
static int it6616_create_class_attr(struct it6616 *it6616)
|
||||
{
|
||||
int ret = 0;
|
||||
|
||||
it6616->hdmirx_class = class_create(THIS_MODULE, "hdmirx_it6616");
|
||||
if (IS_ERR(it6616->hdmirx_class)) {
|
||||
ret = -ENOMEM;
|
||||
dev_err(it6616->dev, "failed to create hdmirx_it6616 class!\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
it6616->classdev = device_create(it6616->hdmirx_class, NULL,
|
||||
MKDEV(0, 0), NULL, "hdmirx_it6616");
|
||||
if (IS_ERR(it6616->classdev)) {
|
||||
ret = PTR_ERR(it6616->classdev);
|
||||
dev_err(it6616->dev, "Failed to create device\n");
|
||||
goto err1;
|
||||
}
|
||||
|
||||
ret = device_create_file(it6616->classdev,
|
||||
&dev_attr_audio_present);
|
||||
if (ret) {
|
||||
dev_err(it6616->dev, "failed to create attr audio_present!\n");
|
||||
goto err1;
|
||||
}
|
||||
|
||||
ret = device_create_file(it6616->classdev,
|
||||
&dev_attr_audio_rate);
|
||||
if (ret) {
|
||||
dev_err(it6616->dev,
|
||||
"failed to create attr audio_rate!\n");
|
||||
goto err;
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
||||
err:
|
||||
device_remove_file(it6616->classdev, &dev_attr_audio_present);
|
||||
err1:
|
||||
class_destroy(it6616->hdmirx_class);
|
||||
return ret;
|
||||
it6616->classdev = device_create_with_groups(rk_hdmirx_class(),
|
||||
it6616->dev, MKDEV(0, 0),
|
||||
it6616,
|
||||
it6616_audio_groups,
|
||||
"it6616");
|
||||
if (IS_ERR(it6616->classdev))
|
||||
return IS_ERR(it6616->classdev);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void it6616_remove_class_attr(struct it6616 *it6616)
|
||||
{
|
||||
device_remove_file(it6616->classdev, &dev_attr_audio_rate);
|
||||
device_remove_file(it6616->classdev, &dev_attr_audio_present);
|
||||
class_destroy(it6616->hdmirx_class);
|
||||
}
|
||||
|
||||
static int it6616_probe(struct i2c_client *client,
|
||||
|
||||
Reference in New Issue
Block a user