mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-09 04:10:18 +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
|
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.
|
||||||
|
|
||||||
|
|||||||
@@ -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,
|
||||||
|
|||||||
Reference in New Issue
Block a user