media: i2c: it6616: create hdmirx_class devices

Signed-off-by: Shunhua Lan <lsh@rock-chips.com>
Change-Id: I9e2cf3c8330504124931f79d111bfa3fb54462db
This commit is contained in:
Shunhua Lan
2023-02-06 16:49:07 +08:00
committed by Tao Huang
parent 6e85806bc9
commit 75810f87c9
2 changed files with 17 additions and 41 deletions

View File

@@ -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.

View File

@@ -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,