Lines Matching refs:ec

51 static int ec_get_version(struct cros_ec_dev *ec, char *str, int maxlen)  in ec_get_version()  argument
65 msg->command = EC_CMD_GET_VERSION + ec->cmd_offset; in ec_get_version()
69 ret = cros_ec_cmd_xfer(ec->ec_dev, msg); in ec_get_version()
95 static int cros_ec_check_features(struct cros_ec_dev *ec, int feature) in cros_ec_check_features() argument
100 if (ec->features[0] == -1U && ec->features[1] == -1U) { in cros_ec_check_features()
103 msg = kmalloc(sizeof(*msg) + sizeof(ec->features), GFP_KERNEL); in cros_ec_check_features()
108 msg->command = EC_CMD_GET_FEATURES + ec->cmd_offset; in cros_ec_check_features()
109 msg->insize = sizeof(ec->features); in cros_ec_check_features()
112 ret = cros_ec_cmd_xfer(ec->ec_dev, msg); in cros_ec_check_features()
114 dev_warn(ec->dev, "cannot get EC features: %d/%d\n", in cros_ec_check_features()
116 memset(ec->features, 0, sizeof(ec->features)); in cros_ec_check_features()
118 memcpy(ec->features, msg->data, sizeof(ec->features)); in cros_ec_check_features()
121 dev_dbg(ec->dev, "EC features %08x %08x\n", in cros_ec_check_features()
122 ec->features[0], ec->features[1]); in cros_ec_check_features()
127 return ec->features[feature / 32] & EC_FEATURE_MASK_0(feature); in cros_ec_check_features()
133 struct cros_ec_dev *ec = container_of(inode->i_cdev, in ec_device_open() local
135 filp->private_data = ec; in ec_device_open()
148 struct cros_ec_dev *ec = filp->private_data; in ec_device_read() local
157 ret = ec_get_version(ec, msg, sizeof(msg)); in ec_device_read()
171 static long ec_device_ioctl_xcmd(struct cros_ec_dev *ec, void __user *arg) in ec_device_ioctl_xcmd() argument
200 s_cmd->command += ec->cmd_offset; in ec_device_ioctl_xcmd()
201 ret = cros_ec_cmd_xfer(ec->ec_dev, s_cmd); in ec_device_ioctl_xcmd()
213 static long ec_device_ioctl_readmem(struct cros_ec_dev *ec, void __user *arg) in ec_device_ioctl_readmem() argument
215 struct cros_ec_device *ec_dev = ec->ec_dev; in ec_device_ioctl_readmem()
240 struct cros_ec_dev *ec = filp->private_data; in ec_device_ioctl() local
247 return ec_device_ioctl_xcmd(ec, (void __user *)arg); in ec_device_ioctl()
249 return ec_device_ioctl_readmem(ec, (void __user *)arg); in ec_device_ioctl()
266 static void cros_ec_sensors_register(struct cros_ec_dev *ec) in cros_ec_sensors_register() argument
286 msg->command = EC_CMD_MOTION_SENSE_CMD + ec->cmd_offset; in cros_ec_sensors_register()
293 ret = cros_ec_cmd_xfer(ec->ec_dev, msg); in cros_ec_sensors_register()
295 dev_warn(ec->dev, "cannot get EC sensor information: %d/%d\n", in cros_ec_sensors_register()
319 ret = cros_ec_cmd_xfer(ec->ec_dev, msg); in cros_ec_sensors_register()
321 dev_warn(ec->dev, "no info for EC sensor %d : %d/%d\n", in cros_ec_sensors_register()
348 dev_warn(ec->dev, "unknown type %d\n", resp->info.type); in cros_ec_sensors_register()
362 ec->has_kb_wake_angle = true; in cros_ec_sensors_register()
364 if (cros_ec_check_features(ec, EC_FEATURE_MOTION_SENSE_FIFO)) { in cros_ec_sensors_register()
369 ret = mfd_add_devices(ec->dev, 0, sensor_cells, id, in cros_ec_sensors_register()
372 dev_err(ec->dev, "failed to add EC sensors\n"); in cros_ec_sensors_register()
398 struct cros_ec_dev *ec = devm_kzalloc(dev, sizeof(*ec), GFP_KERNEL); in ec_device_probe() local
400 if (!ec) in ec_device_probe()
403 dev_set_drvdata(dev, ec); in ec_device_probe()
404 ec->ec_dev = dev_get_drvdata(dev->parent); in ec_device_probe()
405 ec->dev = dev; in ec_device_probe()
406 ec->cmd_offset = ec_platform->cmd_offset; in ec_device_probe()
407 ec->features[0] = -1U; /* Not cached yet */ in ec_device_probe()
408 ec->features[1] = -1U; /* Not cached yet */ in ec_device_probe()
409 device_initialize(&ec->class_dev); in ec_device_probe()
410 cdev_init(&ec->cdev, &fops); in ec_device_probe()
417 ec->class_dev.devt = MKDEV(ec_major, pdev->id); in ec_device_probe()
418 ec->class_dev.class = &cros_class; in ec_device_probe()
419 ec->class_dev.parent = dev; in ec_device_probe()
421 retval = dev_set_name(&ec->class_dev, "%s", ec_platform->ec_name); in ec_device_probe()
428 if (cros_ec_check_features(ec, EC_FEATURE_MOTION_SENSE)) in ec_device_probe()
429 cros_ec_sensors_register(ec); in ec_device_probe()
432 if (cros_ec_check_features(ec, EC_FEATURE_CEC)) { in ec_device_probe()
433 retval = mfd_add_devices(ec->dev, PLATFORM_DEVID_AUTO, in ec_device_probe()
438 dev_err(ec->dev, in ec_device_probe()
444 if (cros_ec_check_features(ec, EC_FEATURE_RTC)) { in ec_device_probe()
445 retval = mfd_add_devices(ec->dev, PLATFORM_DEVID_AUTO, in ec_device_probe()
450 dev_err(ec->dev, in ec_device_probe()
456 if (cros_ec_check_features(ec, EC_FEATURE_USB_PD)) { in ec_device_probe()
457 retval = mfd_add_devices(ec->dev, PLATFORM_DEVID_AUTO, in ec_device_probe()
462 dev_err(ec->dev, in ec_device_probe()
468 lb_manual_suspend_ctrl(ec, 1); in ec_device_probe()
471 retval = cdev_device_add(&ec->cdev, &ec->class_dev); in ec_device_probe()
477 if (cros_ec_debugfs_init(ec)) in ec_device_probe()
483 put_device(&ec->class_dev); in ec_device_probe()
489 struct cros_ec_dev *ec = dev_get_drvdata(&pdev->dev); in ec_device_remove() local
492 lb_manual_suspend_ctrl(ec, 0); in ec_device_remove()
494 cros_ec_debugfs_remove(ec); in ec_device_remove()
496 cdev_del(&ec->cdev); in ec_device_remove()
497 device_unregister(&ec->class_dev); in ec_device_remove()
503 struct cros_ec_dev *ec = dev_get_drvdata(&pdev->dev); in ec_device_shutdown() local
506 cros_ec_debugfs_remove(ec); in ec_device_shutdown()
517 struct cros_ec_dev *ec = dev_get_drvdata(dev); in ec_device_suspend() local
519 cros_ec_debugfs_suspend(ec); in ec_device_suspend()
521 lb_suspend(ec); in ec_device_suspend()
528 struct cros_ec_dev *ec = dev_get_drvdata(dev); in ec_device_resume() local
530 cros_ec_debugfs_resume(ec); in ec_device_resume()
532 lb_resume(ec); in ec_device_resume()