return simple_read_from_buffer(user_buf, count, ppos, buf, pos);
}
+static ssize_t mx_procfs_mx_wlbt_stat_read(struct file *file, char __user *user_buf, size_t count, loff_t *ppos)
+{
+ struct mxproc *mxproc = file->private_data;
+ struct scsc_mif_abs *mif_abs;
+ int pos = 0;
+ int r;
+ char buf[32];
+ const size_t bufsz = sizeof(buf);
+ u32 val = 0xff;
+
+ OS_UNUSED_PARAMETER(file);
+
+ if (!mxproc || !mxproc->mxman || !mxproc->mxman->mx)
+ return 0;
+
+ mif_abs = scsc_mx_get_mif_abs(mxproc->mxman->mx);
+
+ /* Read WLBT_STAT register */
+ if (mif_abs->mif_read_register) {
+ r = mif_abs->mif_read_register(mif_abs, SCSC_REG_READ_WLBT_STAT, &val);
+ if (r)
+ val = 0xff; /* failed */
+ }
+
+ pos += scnprintf(buf + pos, bufsz - pos, "0x%x\n", val);
+
+ return simple_read_from_buffer(user_buf, count, ppos, buf, pos);
+}
MX_PROCFS_RW_FILE_OPS(mx_fail);
MX_PROCFS_RW_FILE_OPS(mx_freeze);
MX_PROCFS_RO_FILE_OPS(mx_status);
MX_PROCFS_RO_FILE_OPS(mx_services);
MX_PROCFS_RO_FILE_OPS(mx_lastpanic);
+MX_PROCFS_RO_FILE_OPS(mx_wlbt_stat);
static u32 proc_count;
MX_PROCFS_ADD_FILE(mxproc, mx_status, parent, S_IRUSR | S_IRGRP | S_IROTH);
MX_PROCFS_ADD_FILE(mxproc, mx_services, parent, S_IRUSR | S_IRGRP | S_IROTH);
MX_PROCFS_ADD_FILE(mxproc, mx_lastpanic, parent, S_IRUSR | S_IRGRP | S_IROTH);
+ MX_PROCFS_ADD_FILE(mxproc, mx_wlbt_stat, parent, S_IRUSR | S_IRGRP | S_IROTH);
SCSC_TAG_DEBUG(MX_PROC, "created %s proc dir\n", dir);
proc_count++;
MX_PROCFS_REMOVE_FILE(mx_status, mxproc->procfs_ctrl_dir);
MX_PROCFS_REMOVE_FILE(mx_services, mxproc->procfs_ctrl_dir);
MX_PROCFS_REMOVE_FILE(mx_lastpanic, mxproc->procfs_ctrl_dir);
+ MX_PROCFS_REMOVE_FILE(mx_wlbt_stat, mxproc->procfs_ctrl_dir);
(void)snprintf(dir, sizeof(dir), "%s%d", procdir_ctrl, mxproc->procfs_ctrl_dir_num);
remove_proc_entry(dir, NULL);
mxproc->procfs_ctrl_dir = NULL;
/* Implement if required */
}
+static int platform_mif_read_register(struct scsc_mif_abs *interface, u64 id, u32 *val)
+{
+ struct platform_mif *platform = platform_mif_from_mif_abs(interface);
+
+ if (id == SCSC_REG_READ_WLBT_STAT) {
+ regmap_read(platform->pmureg, WLBT_STAT, val);
+ return 0;
+ }
+
+ return -EIO;
+}
+
static void platform_mif_dump_register(struct scsc_mif_abs *interface)
{
struct platform_mif *platform = platform_mif_from_mif_abs(interface);
platform_if->get_mif_device = platform_mif_get_mif_device;
platform_if->irq_clear = platform_mif_irq_clear;
platform_if->mif_dump_registers = platform_mif_dump_register;
+ platform_if->mif_read_register = platform_mif_read_register;
platform_if->mif_cleanup = platform_mif_cleanup;
platform_if->mif_restart = platform_mif_restart;
#ifdef CONFIG_SCSC_SMAPPER