There is no need to create sysfs attributes in the main driver core, let F34 implementation do that. Signed-off-by: Dmitry Torokhov <dmitry.torokhov@xxxxxxxxx> --- drivers/input/rmi4/rmi_driver.c | 5 --- drivers/input/rmi4/rmi_driver.h | 14 ------- drivers/input/rmi4/rmi_f34.c | 87 +++++++++++++++++++++++------------------ 3 files changed, 50 insertions(+), 56 deletions(-) diff --git a/drivers/input/rmi4/rmi_driver.c b/drivers/input/rmi4/rmi_driver.c index d64fc92858f2..d9cfe4ec93fa 100644 --- a/drivers/input/rmi4/rmi_driver.c +++ b/drivers/input/rmi4/rmi_driver.c @@ -1001,7 +1001,6 @@ static int rmi_driver_remove(struct device *dev) rmi_disable_irq(rmi_dev, false); - rmi_f34_remove_sysfs(rmi_dev); rmi_free_function_list(rmi_dev); return 0; @@ -1215,10 +1214,6 @@ static int rmi_driver_probe(struct device *dev) if (retval) goto err; - retval = rmi_f34_create_sysfs(rmi_dev); - if (retval) - goto err; - if (data->input) { rmi_driver_set_input_name(rmi_dev, data->input); if (!rmi_dev->xport->input) { diff --git a/drivers/input/rmi4/rmi_driver.h b/drivers/input/rmi4/rmi_driver.h index f1a2a2266022..1ada14d7d005 100644 --- a/drivers/input/rmi4/rmi_driver.h +++ b/drivers/input/rmi4/rmi_driver.h @@ -120,20 +120,6 @@ static inline int rmi_f03_overwrite_button(struct rmi_function *fn, static inline void rmi_f03_commit_buttons(struct rmi_function *fn) {} #endif -#ifdef CONFIG_RMI4_F34 -int rmi_f34_create_sysfs(struct rmi_device *rmi_dev); -void rmi_f34_remove_sysfs(struct rmi_device *rmi_dev); -#else -static inline int rmi_f34_create_sysfs(struct rmi_device *rmi_dev) -{ - return 0; -} - -static inline void rmi_f34_remove_sysfs(struct rmi_device *rmi_dev) -{ -} -#endif /* CONFIG_RMI_F34 */ - extern struct rmi_function_handler rmi_f01_handler; extern struct rmi_function_handler rmi_f03_handler; extern struct rmi_function_handler rmi_f11_handler; diff --git a/drivers/input/rmi4/rmi_f34.c b/drivers/input/rmi4/rmi_f34.c index 425fe140e9df..d4d5297d5a8b 100644 --- a/drivers/input/rmi4/rmi_f34.c +++ b/drivers/input/rmi4/rmi_f34.c @@ -509,33 +509,21 @@ static struct attribute_group rmi_firmware_attr_group = { .attrs = rmi_firmware_attrs, }; -static int rmi_f34_probe(struct rmi_function *fn) +static int rmi_f34v5_probe(struct f34_data *f34) { - struct f34_data *f34; - unsigned char f34_queries[9]; + struct rmi_function *fn = f34->fn; + u8 f34_queries[9]; bool has_config_id; - u8 version = fn->fd.function_version; - int ret; - - f34 = devm_kzalloc(&fn->dev, sizeof(struct f34_data), GFP_KERNEL); - if (!f34) - return -ENOMEM; - - f34->fn = fn; - dev_set_drvdata(&fn->dev, f34); - - /* v5 code only supported version 0, try V7 probe */ - if (version > 0) - return rmi_f34v7_probe(f34); + int error; f34->bl_version = 5; - ret = rmi_read_block(fn->rmi_dev, fn->fd.query_base_addr, - f34_queries, sizeof(f34_queries)); - if (ret) { - dev_err(&fn->dev, "%s: Failed to query properties\n", - __func__); - return ret; + error = rmi_read_block(fn->rmi_dev, fn->fd.query_base_addr, + f34_queries, sizeof(f34_queries)); + if (error) { + dev_err(&fn->dev, "%s: Failed to query properties: %d\n", + __func__, error); + return error; } snprintf(f34->bootloader_id, sizeof(f34->bootloader_id), @@ -548,8 +536,8 @@ static int rmi_f34_probe(struct rmi_function *fn) f34->v5.fw_blocks = get_unaligned_le16(&f34_queries[5]); f34->v5.config_blocks = get_unaligned_le16(&f34_queries[7]); f34->v5.ctrl_address = fn->fd.data_base_addr + F34_BLOCK_DATA_OFFSET + - f34->v5.block_size; - has_config_id = f34_queries[2] & (1 << 2); + f34->v5.block_size; + has_config_id = f34_queries[2] & BIT(2); rmi_dbg(RMI_DEBUG_FN, &fn->dev, "Bootloader ID: %s\n", f34->bootloader_id); @@ -561,11 +549,11 @@ static int rmi_f34_probe(struct rmi_function *fn) f34->v5.config_blocks); if (has_config_id) { - ret = rmi_read_block(fn->rmi_dev, fn->fd.control_base_addr, - f34_queries, sizeof(f34_queries)); - if (ret) { + error = rmi_read_block(fn->rmi_dev, fn->fd.control_base_addr, + f34_queries, sizeof(f34_queries)); + if (error) { dev_err(&fn->dev, "Failed to read F34 config ID\n"); - return ret; + return error; } snprintf(f34->configuration_id, sizeof(f34->configuration_id), @@ -580,21 +568,46 @@ static int rmi_f34_probe(struct rmi_function *fn) return 0; } -int rmi_f34_create_sysfs(struct rmi_device *rmi_dev) +static int rmi_f34_probe(struct rmi_function *fn) { - return sysfs_create_group(&rmi_dev->dev.kobj, &rmi_firmware_attr_group); + struct f34_data *f34; + u8 version = fn->fd.function_version; + int error; + + f34 = devm_kzalloc(&fn->dev, sizeof(struct f34_data), GFP_KERNEL); + if (!f34) + return -ENOMEM; + + f34->fn = fn; + dev_set_drvdata(&fn->dev, f34); + + /* v5 code only supported version 0 */ + error = version > 0 ? rmi_f34v7_probe(f34) : rmi_f34v5_probe(f34); + if (error) + return error; + + error = sysfs_create_group(&fn->rmi_dev->dev.kobj, + &rmi_firmware_attr_group); + if (error) { + dev_err(&fn->dev, "%s: Failed to create sysfs attributes: %d\n", + __func__, error); + return error; + } + + return 0; } -void rmi_f34_remove_sysfs(struct rmi_device *rmi_dev) +static void rmi_f34_remove(struct rmi_function *fn) { - sysfs_remove_group(&rmi_dev->dev.kobj, &rmi_firmware_attr_group); + sysfs_remove_group(&fn->rmi_dev->dev.kobj, &rmi_firmware_attr_group); } struct rmi_function_handler rmi_f34_handler = { - .driver = { - .name = "rmi4_f34", + .driver = { + .name = "rmi4_f34", }, - .func = 0x34, - .probe = rmi_f34_probe, - .attention = rmi_f34_attention, + .func = 0x34, + .probe = rmi_f34_probe, + .remove = rmi_f34_remove, + .attention = rmi_f34_attention, }; -- 2.11.0.483.g087da7b7c-goog -- Dmitry -- To unsubscribe from this list: send the line "unsubscribe linux-input" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html