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 depends on VIDEO_V4L2 && I2C && VIDEO_V4L2_SUBDEV_API
select HDMI select HDMI
select V4L2_FWNODE select V4L2_FWNODE
select VIDEO_ROCKCHIP_HDMIRX_CLASS
help help
Support for the ITE IT6616 series HDMI to MIPI CSI-2 bridge. Support for the ITE IT6616 series HDMI to MIPI CSI-2 bridge.

View File

@@ -20,6 +20,7 @@
#include <linux/module.h> #include <linux/module.h>
#include <linux/of_graph.h> #include <linux/of_graph.h>
#include <linux/rk-camera-module.h> #include <linux/rk-camera-module.h>
#include <linux/rk_hdmirx_class.h>
#include <linux/slab.h> #include <linux/slab.h>
#include <linux/timer.h> #include <linux/timer.h>
#include <linux/v4l2-dv-timings.h> #include <linux/v4l2-dv-timings.h>
@@ -471,7 +472,6 @@ struct it6616 {
struct regmap *mipi_regmap; struct regmap *mipi_regmap;
struct regmap *edid_regmap; struct regmap *edid_regmap;
u8 attr_hdmi_reg_bank; u8 attr_hdmi_reg_bank;
struct class *hdmirx_class;
struct device *dev; struct device *dev;
struct device *classdev; struct device *classdev;
struct v4l2_fwnode_bus_mipi_csi2 bus; 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_present);
static DEVICE_ATTR_RO(audio_rate); 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) static int it6616_create_class_attr(struct it6616 *it6616)
{ {
int ret = 0; it6616->classdev = device_create_with_groups(rk_hdmirx_class(),
it6616->dev, MKDEV(0, 0),
it6616->hdmirx_class = class_create(THIS_MODULE, "hdmirx_it6616"); it6616,
if (IS_ERR(it6616->hdmirx_class)) { it6616_audio_groups,
ret = -ENOMEM; "it6616");
dev_err(it6616->dev, "failed to create hdmirx_it6616 class!\n"); if (IS_ERR(it6616->classdev))
return ret; return IS_ERR(it6616->classdev);
} return 0;
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;
} }
static void it6616_remove_class_attr(struct it6616 *it6616) 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_rate);
device_remove_file(it6616->classdev, &dev_attr_audio_present); device_remove_file(it6616->classdev, &dev_attr_audio_present);
class_destroy(it6616->hdmirx_class);
} }
static int it6616_probe(struct i2c_client *client, static int it6616_probe(struct i2c_client *client,