From 75810f87c94e69228a11be1ad6822c6436999890 Mon Sep 17 00:00:00 2001 From: Shunhua Lan Date: Mon, 6 Feb 2023 16:49:07 +0800 Subject: [PATCH] media: i2c: it6616: create hdmirx_class devices Signed-off-by: Shunhua Lan Change-Id: I9e2cf3c8330504124931f79d111bfa3fb54462db --- drivers/media/i2c/Kconfig | 1 + drivers/media/i2c/it6616.c | 57 +++++++++++--------------------------- 2 files changed, 17 insertions(+), 41 deletions(-) diff --git a/drivers/media/i2c/Kconfig b/drivers/media/i2c/Kconfig index b3cd4efc9d6a..669daed8eb89 100644 --- a/drivers/media/i2c/Kconfig +++ b/drivers/media/i2c/Kconfig @@ -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. diff --git a/drivers/media/i2c/it6616.c b/drivers/media/i2c/it6616.c index fc930d2938c7..22c610f4fd79 100644 --- a/drivers/media/i2c/it6616.c +++ b/drivers/media/i2c/it6616.c @@ -20,6 +20,7 @@ #include #include #include +#include #include #include #include @@ -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,