Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

platform/chrome: cros_ec_chardev: Decouple fops from struct cros_ec_dev

The fops doesn't really need to hold a reference to struct cros_ec_dev.
Remove the references from the fops.

No functional changes.

Link: https://lore.kernel.org/r/20250721044456.2736300-4-tzungbi@kernel.org
Signed-off-by: Tzung-Bi Shih <tzungbi@kernel.org>

+22 -22
+22 -22
drivers/platform/chrome/cros_ec_chardev.c
··· 32 32 #define CROS_MAX_EVENT_LEN PAGE_SIZE 33 33 34 34 struct chardev_priv { 35 - struct cros_ec_dev *ec_dev; 35 + struct cros_ec_device *ec_dev; 36 36 struct notifier_block notifier; 37 37 wait_queue_head_t wait_event; 38 38 unsigned long event_mask; 39 39 struct list_head events; 40 40 size_t event_len; 41 + u16 cmd_offset; 41 42 }; 42 43 43 44 struct ec_event { ··· 48 47 u8 data[]; 49 48 }; 50 49 51 - static int ec_get_version(struct cros_ec_dev *ec, char *str, int maxlen) 50 + static int ec_get_version(struct chardev_priv *priv, char *str, int maxlen) 52 51 { 53 52 static const char * const current_image_name[] = { 54 53 "unknown", "read-only", "read-write", "invalid", ··· 61 60 if (!msg) 62 61 return -ENOMEM; 63 62 64 - msg->command = EC_CMD_GET_VERSION + ec->cmd_offset; 63 + msg->command = EC_CMD_GET_VERSION + priv->cmd_offset; 65 64 msg->insize = sizeof(*resp); 66 65 67 - ret = cros_ec_cmd_xfer_status(ec->ec_dev, msg); 66 + ret = cros_ec_cmd_xfer_status(priv->ec_dev, msg); 68 67 if (ret < 0) { 69 68 snprintf(str, maxlen, 70 69 "Unknown EC version, returned error: %d\n", ··· 92 91 { 93 92 struct chardev_priv *priv = container_of(nb, struct chardev_priv, 94 93 notifier); 95 - struct cros_ec_device *ec_dev = priv->ec_dev->ec_dev; 94 + struct cros_ec_device *ec_dev = priv->ec_dev; 96 95 struct ec_event *event; 97 96 unsigned long event_bit = 1 << ec_dev->event_data.event_type; 98 97 int total_size = sizeof(*event) + ec_dev->event_size; ··· 157 156 static int cros_ec_chardev_open(struct inode *inode, struct file *filp) 158 157 { 159 158 struct miscdevice *mdev = filp->private_data; 160 - struct cros_ec_dev *ec_dev = dev_get_drvdata(mdev->parent); 159 + struct cros_ec_dev *ec = dev_get_drvdata(mdev->parent); 160 + struct cros_ec_device *ec_dev = ec->ec_dev; 161 161 struct chardev_priv *priv; 162 162 int ret; 163 163 ··· 167 165 return -ENOMEM; 168 166 169 167 priv->ec_dev = ec_dev; 168 + priv->cmd_offset = ec->cmd_offset; 170 169 filp->private_data = priv; 171 170 INIT_LIST_HEAD(&priv->events); 172 171 init_waitqueue_head(&priv->wait_event); 173 172 nonseekable_open(inode, filp); 174 173 175 174 priv->notifier.notifier_call = cros_ec_chardev_mkbp_event; 176 - ret = blocking_notifier_chain_register(&ec_dev->ec_dev->event_notifier, 175 + ret = blocking_notifier_chain_register(&ec_dev->event_notifier, 177 176 &priv->notifier); 178 177 if (ret) { 179 178 dev_err(ec_dev->dev, "failed to register event notifier\n"); ··· 202 199 char msg[sizeof(struct ec_response_get_version) + 203 200 sizeof(CROS_EC_DEV_VERSION)]; 204 201 struct chardev_priv *priv = filp->private_data; 205 - struct cros_ec_dev *ec_dev = priv->ec_dev; 206 202 size_t count; 207 203 int ret; 208 204 ··· 235 233 if (*offset != 0) 236 234 return 0; 237 235 238 - ret = ec_get_version(ec_dev, msg, sizeof(msg)); 236 + ret = ec_get_version(priv, msg, sizeof(msg)); 239 237 if (ret) 240 238 return ret; 241 239 ··· 251 249 static int cros_ec_chardev_release(struct inode *inode, struct file *filp) 252 250 { 253 251 struct chardev_priv *priv = filp->private_data; 254 - struct cros_ec_dev *ec_dev = priv->ec_dev; 252 + struct cros_ec_device *ec_dev = priv->ec_dev; 255 253 struct ec_event *event, *e; 256 254 257 - blocking_notifier_chain_unregister(&ec_dev->ec_dev->event_notifier, 255 + blocking_notifier_chain_unregister(&ec_dev->event_notifier, 258 256 &priv->notifier); 259 257 260 258 list_for_each_entry_safe(event, e, &priv->events, node) { ··· 269 267 /* 270 268 * Ioctls 271 269 */ 272 - static long cros_ec_chardev_ioctl_xcmd(struct cros_ec_dev *ec, void __user *arg) 270 + static long cros_ec_chardev_ioctl_xcmd(struct chardev_priv *priv, void __user *arg) 273 271 { 274 272 struct cros_ec_command *s_cmd; 275 273 struct cros_ec_command u_cmd; ··· 298 296 goto exit; 299 297 } 300 298 301 - s_cmd->command += ec->cmd_offset; 302 - ret = cros_ec_cmd_xfer(ec->ec_dev, s_cmd); 299 + s_cmd->command += priv->cmd_offset; 300 + ret = cros_ec_cmd_xfer(priv->ec_dev, s_cmd); 303 301 /* Only copy data to userland if data was received. */ 304 302 if (ret < 0) 305 303 goto exit; ··· 311 309 return ret; 312 310 } 313 311 314 - static long cros_ec_chardev_ioctl_readmem(struct cros_ec_dev *ec, 315 - void __user *arg) 312 + static long cros_ec_chardev_ioctl_readmem(struct chardev_priv *priv, void __user *arg) 316 313 { 317 - struct cros_ec_device *ec_dev = ec->ec_dev; 314 + struct cros_ec_device *ec_dev = priv->ec_dev; 318 315 struct cros_ec_readmem s_mem = { }; 319 316 long num; 320 317 ··· 342 341 unsigned long arg) 343 342 { 344 343 struct chardev_priv *priv = filp->private_data; 345 - struct cros_ec_dev *ec = priv->ec_dev; 346 344 347 345 if (_IOC_TYPE(cmd) != CROS_EC_DEV_IOC) 348 346 return -ENOTTY; 349 347 350 348 switch (cmd) { 351 349 case CROS_EC_DEV_IOCXCMD: 352 - return cros_ec_chardev_ioctl_xcmd(ec, (void __user *)arg); 350 + return cros_ec_chardev_ioctl_xcmd(priv, (void __user *)arg); 353 351 case CROS_EC_DEV_IOCRDMEM: 354 - return cros_ec_chardev_ioctl_readmem(ec, (void __user *)arg); 352 + return cros_ec_chardev_ioctl_readmem(priv, (void __user *)arg); 355 353 case CROS_EC_DEV_IOCEVENTMASK: 356 354 priv->event_mask = arg; 357 355 return 0; ··· 372 372 373 373 static int cros_ec_chardev_probe(struct platform_device *pdev) 374 374 { 375 - struct cros_ec_dev *ec_dev = dev_get_drvdata(pdev->dev.parent); 376 - struct cros_ec_platform *ec_platform = dev_get_platdata(ec_dev->dev); 375 + struct cros_ec_dev *ec = dev_get_drvdata(pdev->dev.parent); 376 + struct cros_ec_platform *ec_platform = dev_get_platdata(ec->dev); 377 377 struct miscdevice *misc; 378 378 379 379 /* Create a char device: we want to create it anew */