mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-21 06:01:23 +00:00
chrome platform changes for 5.7
* cros-usbpd-notify and cros_ec_typec - Add a new notification driver that handles and dispatches USB PD related events to other drivers. - Add a Type C connector class driver for cros_ec * CrOS EC - Introduce a new cros_ec_cmd_xfer_status helper * Sensors/iio: - A series from Gwendal that adds Cros EC sensor hub FIFO support * Wilco EC - Fix a build warning. - Platform data shouldn't include kernel.h * Misc - i2c api conversion complete, with i2c_new_client_device instead of i2c_new_device in chromeos_laptop. - Replace zero-length array with flexible-array member in cros_ec_chardev and wilco_ec - Update new structure for SPI transfer delays in cros_ec_spi -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQQCtZK6p/AktxXfkOlzbaomhzOwwgUCXo1lfQAKCRBzbaomhzOw wo6TAQCKHOcrqq5Y9HYXs1QBx8e/0vVwe5Jh76Qi6hUVqXu56QEA65lBZ2ni8Udp f6jQDFkaeYaF2tkghvuNoAkFRI6/rAk= =j4Tt -----END PGP SIGNATURE----- Merge tag 'tag-chrome-platform-for-v5.7' of git://git.kernel.org/pub/scm/linux/kernel/git/chrome-platform/linux Pull chrome platform updates from Benson Leung: cros-usbpd-notify and cros_ec_typec: - Add a new notification driver that handles and dispatches USB PD related events to other drivers. - Add a Type C connector class driver for cros_ec CrOS EC: - Introduce a new cros_ec_cmd_xfer_status helper Sensors/iio: - A series from Gwendal that adds Cros EC sensor hub FIFO support Wilco EC: - Fix a build warning. - Platform data shouldn't include kernel.h Misc: - i2c api conversion complete, with i2c_new_client_device instead of i2c_new_device in chromeos_laptop. - Replace zero-length array with flexible-array member in cros_ec_chardev and wilco_ec - Update new structure for SPI transfer delays in cros_ec_spi * tag 'tag-chrome-platform-for-v5.7' of git://git.kernel.org/pub/scm/linux/kernel/git/chrome-platform/linux: (34 commits) platform/chrome: cros_ec_spi: Wait for USECS, not NSECS iio: cros_ec: Use Hertz as unit for sampling frequency iio: cros_ec: Report hwfifo_watermark_max iio: cros_ec: Expose hwfifo_timeout iio: cros_ec: Remove pm function iio: cros_ec: Register to cros_ec_sensorhub when EC supports FIFO iio: expose iio_device_set_clock iio: cros_ec: Move function description to .c file platform/chrome: cros_ec_sensorhub: Add median filter platform/chrome: cros_ec_sensorhub: Add code to spread timestmap platform/chrome: cros_ec_sensorhub: Add FIFO support platform/chrome: cros_ec_sensorhub: Add the number of sensors in sensorhub platform/chrome: chromeos_laptop: make I2C API conversion complete platform/chrome: wilco_ec: event: Replace zero-length array with flexible-array member platform/chrome: cros_ec_chardev: Replace zero-length array with flexible-array member platform/chrome: cros_ec_typec: Update port info from EC platform/chrome: Add Type C connector class driver platform/chrome: cros_usbpd_notify: Pull PD_HOST_EVENT status platform/chrome: cros_usbpd_notify: Amend ACPI driver to plat platform/chrome: cros_usbpd_notify: Add driver data struct ...
This commit is contained in:
commit
413a103cf6
33 changed files with 2470 additions and 346 deletions
|
@ -125,6 +125,9 @@ struct cros_ec_command {
|
|||
* @host_event_wake_mask: Mask of host events that cause wake from suspend.
|
||||
* @last_event_time: exact time from the hard irq when we got notified of
|
||||
* a new event.
|
||||
* @notifier_ready: The notifier_block to let the kernel re-query EC
|
||||
* communication protocol when the EC sends
|
||||
* EC_HOST_EVENT_INTERFACE_READY.
|
||||
* @ec: The platform_device used by the mfd driver to interface with the
|
||||
* main EC.
|
||||
* @pd: The platform_device used by the mfd driver to interface with the
|
||||
|
@ -166,6 +169,7 @@ struct cros_ec_device {
|
|||
u32 host_event_wake_mask;
|
||||
u32 last_resume_result;
|
||||
ktime_t last_event_time;
|
||||
struct notifier_block notifier_ready;
|
||||
|
||||
/* The platform devices used by the mfd driver */
|
||||
struct platform_device *ec;
|
||||
|
|
|
@ -8,8 +8,13 @@
|
|||
#ifndef __LINUX_PLATFORM_DATA_CROS_EC_SENSORHUB_H
|
||||
#define __LINUX_PLATFORM_DATA_CROS_EC_SENSORHUB_H
|
||||
|
||||
#include <linux/ktime.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/notifier.h>
|
||||
#include <linux/platform_data/cros_ec_commands.h>
|
||||
|
||||
struct iio_dev;
|
||||
|
||||
/**
|
||||
* struct cros_ec_sensor_platform - ChromeOS EC sensor platform information.
|
||||
* @sensor_num: Id of the sensor, as reported by the EC.
|
||||
|
@ -19,12 +24,170 @@ struct cros_ec_sensor_platform {
|
|||
};
|
||||
|
||||
/**
|
||||
* struct cros_ec_sensorhub - Sensor Hub device data.
|
||||
* typedef cros_ec_sensorhub_push_data_cb_t - Callback function to send datum
|
||||
* to specific sensors.
|
||||
*
|
||||
* @ec: Embedded Controller where the hub is located.
|
||||
* @indio_dev: The IIO device that will process the sample.
|
||||
* @data: Vector array of the ring sample.
|
||||
* @timestamp: Timestamp in host timespace when the sample was acquired by
|
||||
* the EC.
|
||||
*/
|
||||
struct cros_ec_sensorhub {
|
||||
struct cros_ec_dev *ec;
|
||||
typedef int (*cros_ec_sensorhub_push_data_cb_t)(struct iio_dev *indio_dev,
|
||||
s16 *data,
|
||||
s64 timestamp);
|
||||
|
||||
struct cros_ec_sensorhub_sensor_push_data {
|
||||
struct iio_dev *indio_dev;
|
||||
cros_ec_sensorhub_push_data_cb_t push_data_cb;
|
||||
};
|
||||
|
||||
enum {
|
||||
CROS_EC_SENSOR_LAST_TS,
|
||||
CROS_EC_SENSOR_NEW_TS,
|
||||
CROS_EC_SENSOR_ALL_TS
|
||||
};
|
||||
|
||||
struct cros_ec_sensors_ring_sample {
|
||||
u8 sensor_id;
|
||||
u8 flag;
|
||||
s16 vector[3];
|
||||
s64 timestamp;
|
||||
} __packed;
|
||||
|
||||
/* State used for cros_ec_ring_fix_overflow */
|
||||
struct cros_ec_sensors_ec_overflow_state {
|
||||
s64 offset;
|
||||
s64 last;
|
||||
};
|
||||
|
||||
/* Length of the filter, how long to remember entries for */
|
||||
#define CROS_EC_SENSORHUB_TS_HISTORY_SIZE 64
|
||||
|
||||
/**
|
||||
* struct cros_ec_sensors_ts_filter_state - Timestamp filetr state.
|
||||
*
|
||||
* @x_offset: x is EC interrupt time. x_offset its last value.
|
||||
* @y_offset: y is the difference between AP and EC time, y_offset its last
|
||||
* value.
|
||||
* @x_history: The past history of x, relative to x_offset.
|
||||
* @y_history: The past history of y, relative to y_offset.
|
||||
* @m_history: rate between y and x.
|
||||
* @history_len: Amount of valid historic data in the arrays.
|
||||
* @temp_buf: Temporary buffer used when updating the filter.
|
||||
* @median_m: median value of m_history
|
||||
* @median_error: final error to apply to AP interrupt timestamp to get the
|
||||
* "true timestamp" the event occurred.
|
||||
*/
|
||||
struct cros_ec_sensors_ts_filter_state {
|
||||
s64 x_offset, y_offset;
|
||||
s64 x_history[CROS_EC_SENSORHUB_TS_HISTORY_SIZE];
|
||||
s64 y_history[CROS_EC_SENSORHUB_TS_HISTORY_SIZE];
|
||||
s64 m_history[CROS_EC_SENSORHUB_TS_HISTORY_SIZE];
|
||||
int history_len;
|
||||
|
||||
s64 temp_buf[CROS_EC_SENSORHUB_TS_HISTORY_SIZE];
|
||||
|
||||
s64 median_m;
|
||||
s64 median_error;
|
||||
};
|
||||
|
||||
/* struct cros_ec_sensors_ts_batch_state - State of batch of a single sensor.
|
||||
*
|
||||
* Use to store information to batch data using median fileter information.
|
||||
*
|
||||
* @penul_ts: last but one batch timestamp (penultimate timestamp).
|
||||
* Used for timestamp spreading calculations
|
||||
* when a batch shows up.
|
||||
* @penul_len: last but one batch length.
|
||||
* @last_ts: Last batch timestam.
|
||||
* @last_len: Last batch length.
|
||||
* @newest_sensor_event: Last sensor timestamp.
|
||||
*/
|
||||
struct cros_ec_sensors_ts_batch_state {
|
||||
s64 penul_ts;
|
||||
int penul_len;
|
||||
s64 last_ts;
|
||||
int last_len;
|
||||
s64 newest_sensor_event;
|
||||
};
|
||||
|
||||
/*
|
||||
* struct cros_ec_sensorhub - Sensor Hub device data.
|
||||
*
|
||||
* @dev: Device object, mostly used for logging.
|
||||
* @ec: Embedded Controller where the hub is located.
|
||||
* @sensor_num: Number of MEMS sensors present in the EC.
|
||||
* @msg: Structure to send FIFO requests.
|
||||
* @params: Pointer to parameters in msg.
|
||||
* @resp: Pointer to responses in msg.
|
||||
* @cmd_lock : Lock for sending msg.
|
||||
* @notifier: Notifier to kick the FIFO interrupt.
|
||||
* @ring: Preprocessed ring to store events.
|
||||
* @fifo_timestamp: Array for event timestamp and spreading.
|
||||
* @fifo_info: Copy of FIFO information coming from the EC.
|
||||
* @fifo_size: Size of the ring.
|
||||
* @batch_state: Per sensor information of the last batches received.
|
||||
* @overflow_a: For handling timestamp overflow for a time (sensor events)
|
||||
* @overflow_b: For handling timestamp overflow for b time (ec interrupts)
|
||||
* @filter: Medium fileter structure.
|
||||
* @tight_timestamps: Set to truen when EC support tight timestamping:
|
||||
* The timestamps reported from the EC have low jitter.
|
||||
* Timestamps also come before every sample. Set either
|
||||
* by feature bits coming from the EC or userspace.
|
||||
* @future_timestamp_count: Statistics used to compute shaved time.
|
||||
* This occurs when timestamp interpolation from EC
|
||||
* time to AP time accidentally puts timestamps in
|
||||
* the future. These timestamps are clamped to
|
||||
* `now` and these count/total_ns maintain the
|
||||
* statistics for how much time was removed in a
|
||||
* given period.
|
||||
* @future_timestamp_total_ns: Total amount of time shaved.
|
||||
* @push_data: Array of callback to send datums to iio sensor object.
|
||||
*/
|
||||
struct cros_ec_sensorhub {
|
||||
struct device *dev;
|
||||
struct cros_ec_dev *ec;
|
||||
int sensor_num;
|
||||
|
||||
struct cros_ec_command *msg;
|
||||
struct ec_params_motion_sense *params;
|
||||
struct ec_response_motion_sense *resp;
|
||||
struct mutex cmd_lock; /* Lock for protecting msg structure. */
|
||||
|
||||
struct notifier_block notifier;
|
||||
|
||||
struct cros_ec_sensors_ring_sample *ring;
|
||||
|
||||
ktime_t fifo_timestamp[CROS_EC_SENSOR_ALL_TS];
|
||||
struct ec_response_motion_sense_fifo_info *fifo_info;
|
||||
int fifo_size;
|
||||
|
||||
struct cros_ec_sensors_ts_batch_state *batch_state;
|
||||
|
||||
struct cros_ec_sensors_ec_overflow_state overflow_a;
|
||||
struct cros_ec_sensors_ec_overflow_state overflow_b;
|
||||
|
||||
struct cros_ec_sensors_ts_filter_state filter;
|
||||
|
||||
int tight_timestamps;
|
||||
|
||||
s32 future_timestamp_count;
|
||||
s64 future_timestamp_total_ns;
|
||||
|
||||
struct cros_ec_sensorhub_sensor_push_data *push_data;
|
||||
};
|
||||
|
||||
int cros_ec_sensorhub_register_push_data(struct cros_ec_sensorhub *sensorhub,
|
||||
u8 sensor_num,
|
||||
struct iio_dev *indio_dev,
|
||||
cros_ec_sensorhub_push_data_cb_t cb);
|
||||
|
||||
void cros_ec_sensorhub_unregister_push_data(struct cros_ec_sensorhub *sensorhub,
|
||||
u8 sensor_num);
|
||||
|
||||
int cros_ec_sensorhub_ring_add(struct cros_ec_sensorhub *sensorhub);
|
||||
void cros_ec_sensorhub_ring_remove(void *arg);
|
||||
int cros_ec_sensorhub_ring_fifo_enable(struct cros_ec_sensorhub *sensorhub,
|
||||
bool on);
|
||||
|
||||
#endif /* __LINUX_PLATFORM_DATA_CROS_EC_SENSORHUB_H */
|
||||
|
|
17
include/linux/platform_data/cros_usbpd_notify.h
Normal file
17
include/linux/platform_data/cros_usbpd_notify.h
Normal file
|
@ -0,0 +1,17 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* ChromeOS EC Power Delivery Notifier Driver
|
||||
*
|
||||
* Copyright 2020 Google LLC
|
||||
*/
|
||||
|
||||
#ifndef __LINUX_PLATFORM_DATA_CROS_USBPD_NOTIFY_H
|
||||
#define __LINUX_PLATFORM_DATA_CROS_USBPD_NOTIFY_H
|
||||
|
||||
#include <linux/notifier.h>
|
||||
|
||||
int cros_usbpd_register_notify(struct notifier_block *nb);
|
||||
|
||||
void cros_usbpd_unregister_notify(struct notifier_block *nb);
|
||||
|
||||
#endif /* __LINUX_PLATFORM_DATA_CROS_USBPD_NOTIFY_H */
|
|
@ -8,8 +8,8 @@
|
|||
#ifndef WILCO_EC_H
|
||||
#define WILCO_EC_H
|
||||
|
||||
#include <linux/device.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/mutex.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
/* Message flags for using the mailbox() interface */
|
||||
#define WILCO_EC_FLAG_NO_RESPONSE BIT(0) /* EC does not respond */
|
||||
|
@ -17,6 +17,10 @@
|
|||
/* Normal commands have a maximum 32 bytes of data */
|
||||
#define EC_MAILBOX_DATA_SIZE 32
|
||||
|
||||
struct device;
|
||||
struct resource;
|
||||
struct platform_device;
|
||||
|
||||
/**
|
||||
* struct wilco_ec_device - Wilco Embedded Controller handle.
|
||||
* @dev: Device handle.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue