194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij/* 294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij * Copyright (C) 2011 ST-Ericsson 394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij * License terms: GNU General Public License (GPL) version 2 494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij * Debugfs support for the AB5500 MFD driver 594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij */ 694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij 7858a6303f2b14945447a964563f54c918ef3927eAxel Lin#include <linux/module.h> 894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij#include <linux/debugfs.h> 994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij#include <linux/seq_file.h> 1094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij#include <linux/mfd/abx500.h> 11ee66e653ca7425bc8ffca4e00f19a8057cd14e4dLinus Walleij#include <linux/mfd/abx500/ab5500.h> 1294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij#include <linux/uaccess.h> 1394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij 1494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij#include "ab5500-core.h" 1594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij#include "ab5500-debugfs.h" 1694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij 1794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleijstatic struct ab5500_i2c_ranges ab5500_reg_ranges[AB5500_NUM_BANKS] = { 1894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij [AB5500_BANK_LED] = { 1994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .bankid = AB5500_BANK_LED, 2094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .nranges = 1, 2194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .range = (struct ab5500_reg_range[]) { 2294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 2394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x00, 2494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x0C, 2594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 2694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 2794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 2894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 2994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij [AB5500_BANK_ADC] = { 3094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .bankid = AB5500_BANK_ADC, 3194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .nranges = 6, 3294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .range = (struct ab5500_reg_range[]) { 3394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 3494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x1F, 3594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x22, 3694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RO, 3794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 3894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 3994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x23, 4094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x24, 4194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 4294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 4394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 4494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x26, 4594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x2D, 4694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RO, 4794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 4894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 4994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x2F, 5094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x34, 5194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 5294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 5394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 5494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x37, 5594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x57, 5694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 5794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 5894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 5994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x58, 6094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x58, 6194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RO, 6294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 6394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 6494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 6594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij [AB5500_BANK_RTC] = { 6694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .bankid = AB5500_BANK_RTC, 6794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .nranges = 2, 6894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .range = (struct ab5500_reg_range[]) { 6994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 7094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x00, 7194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x04, 7294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 7394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 7494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 7594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x06, 7694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x0C, 7794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 7894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 7994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 8094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 8194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij [AB5500_BANK_STARTUP] = { 8294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .bankid = AB5500_BANK_STARTUP, 8394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .nranges = 12, 8494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .range = (struct ab5500_reg_range[]) { 8594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 8694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x00, 8794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x01, 8894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 8994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 9094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 9194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x1F, 9294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x1F, 9394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 9494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 9594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 9694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x2E, 9794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x2E, 9894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RO, 9994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 10094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 10194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x2F, 10294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x30, 10394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 10494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 10594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 10694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x50, 10794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x51, 10894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 10994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 11094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 11194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x60, 11294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x61, 11394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 11494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 11594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 11694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x66, 11794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x8A, 11894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 11994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 12094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 12194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x8C, 12294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x96, 12394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 12494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 12594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 12694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0xAA, 12794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0xB4, 12894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 12994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 13094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 13194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0xB7, 13294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0xBF, 13394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 13494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 13594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 13694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0xC1, 13794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0xCA, 13894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 13994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 14094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 14194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0xD3, 14294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0xE0, 14394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 14494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 14594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 14694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 14794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij [AB5500_BANK_DBI_ECI] = { 14894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .bankid = AB5500_BANK_DBI_ECI, 14994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .nranges = 3, 15094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .range = (struct ab5500_reg_range[]) { 15194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 15294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x00, 15394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x07, 15494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 15594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 15694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 15794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x10, 15894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x10, 15994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 16094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 16194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 16294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x13, 16394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x13, 16494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 16594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 16694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 16794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 16894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij [AB5500_BANK_CHG] = { 16994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .bankid = AB5500_BANK_CHG, 17094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .nranges = 2, 17194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .range = (struct ab5500_reg_range[]) { 17294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 17394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x11, 17494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x11, 17594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RO, 17694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 17794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 17894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x12, 17994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x1B, 18094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 18194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 18294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 18394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 18494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij [AB5500_BANK_FG_BATTCOM_ACC] = { 18594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .bankid = AB5500_BANK_FG_BATTCOM_ACC, 18694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .nranges = 2, 18794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .range = (struct ab5500_reg_range[]) { 18894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 18994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x00, 19094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x0B, 19194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RO, 19294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 19394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 19494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x0C, 19594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x10, 19694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 19794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 19894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 19994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 20094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij [AB5500_BANK_USB] = { 20194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .bankid = AB5500_BANK_USB, 20294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .nranges = 12, 20394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .range = (struct ab5500_reg_range[]) { 20494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 20594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x01, 20694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x01, 20794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 20894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 20994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 21094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x80, 21194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x83, 21294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 21394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 21494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 21594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x87, 21694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x8A, 21794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 21894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 21994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 22094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x8B, 22194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x8B, 22294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RO, 22394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 22494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 22594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x91, 22694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x92, 22794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RO, 22894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 22994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 23094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x93, 23194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x93, 23294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 23394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 23494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 23594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x94, 23694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x94, 23794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RO, 23894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 23994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 24094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0xA8, 24194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0xB0, 24294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RO, 24394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 24494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 24594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0xB2, 24694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0xB2, 24794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RO, 24894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 24994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 25094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0xB4, 25194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0xBC, 25294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RO, 25394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 25494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 25594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0xBF, 25694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0xBF, 25794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RO, 25894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 25994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 26094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0xC1, 26194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0xC5, 26294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RO, 26394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 26494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 26594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 26694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij [AB5500_BANK_IT] = { 26794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .bankid = AB5500_BANK_IT, 26894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .nranges = 4, 26994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .range = (struct ab5500_reg_range[]) { 27094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 27194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x00, 27294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x02, 27394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RO, 27494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 27594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 27694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x20, 27794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x36, 27894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RO, 27994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 28094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 28194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x40, 28294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x56, 28394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RO, 28494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 28594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 28694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x60, 28794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x76, 28894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RO, 28994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 29094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 29194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 29294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij [AB5500_BANK_VDDDIG_IO_I2C_CLK_TST] = { 29394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .bankid = AB5500_BANK_VDDDIG_IO_I2C_CLK_TST, 29494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .nranges = 7, 29594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .range = (struct ab5500_reg_range[]) { 29694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 29794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x02, 29894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x02, 29994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 30094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 30194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 30294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x12, 30394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x12, 30494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 30594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 30694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 30794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x30, 30894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x34, 30994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 31094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 31194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 31294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x40, 31394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x44, 31494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 31594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 31694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 31794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x50, 31894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x54, 31994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 32094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 32194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 32294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x60, 32394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x64, 32494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 32594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 32694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 32794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x70, 32894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x74, 32994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 33094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 33194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 33294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 33394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij [AB5500_BANK_VIT_IO_I2C_CLK_TST_OTP] = { 33494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .bankid = AB5500_BANK_VIT_IO_I2C_CLK_TST_OTP, 33594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .nranges = 13, 33694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .range = (struct ab5500_reg_range[]) { 33794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 33894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x01, 33994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x01, 34094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 34194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 34294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 34394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x02, 34494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x02, 34594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RO, 34694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 34794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 34894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x0D, 34994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x0F, 35094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 35194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 35294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 35394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x1C, 35494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x1C, 35594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 35694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 35794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 35894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x1E, 35994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x1E, 36094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 36194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 36294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 36394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x20, 36494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x21, 36594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 36694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 36794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 36894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x25, 36994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x25, 37094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 37194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 37294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 37394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x28, 37494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x2A, 37594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 37694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 37794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 37894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x30, 37994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x33, 38094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 38194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 38294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 38394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x40, 38494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x43, 38594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 38694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 38794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 38894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x50, 38994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x53, 39094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 39194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 39294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 39394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x60, 39494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x63, 39594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 39694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 39794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 39894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x70, 39994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x73, 40094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 40194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 40294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 40394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 40494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij [AB5500_BANK_VIBRA] = { 40594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .bankid = AB5500_BANK_VIBRA, 40694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .nranges = 2, 40794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .range = (struct ab5500_reg_range[]) { 40894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 40994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x10, 41094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x13, 41194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 41294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 41394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 41494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0xFE, 41594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0xFE, 41694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 41794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 41894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 41994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 42094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij [AB5500_BANK_AUDIO_HEADSETUSB] = { 42194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .bankid = AB5500_BANK_AUDIO_HEADSETUSB, 42294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .nranges = 2, 42394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .range = (struct ab5500_reg_range[]) { 42494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 42594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x00, 42694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x48, 42794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 42894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 42994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 43094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0xEB, 43194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0xFB, 43294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 43394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 43494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 43594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 43694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij [AB5500_BANK_SIM_USBSIM] = { 43794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .bankid = AB5500_BANK_SIM_USBSIM, 43894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .nranges = 1, 43994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .range = (struct ab5500_reg_range[]) { 44094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 44194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x13, 44294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x19, 44394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 44494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 44594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 44694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 44794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij [AB5500_BANK_VDENC] = { 44894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .bankid = AB5500_BANK_VDENC, 44994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .nranges = 12, 45094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .range = (struct ab5500_reg_range[]) { 45194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 45294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x00, 45394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x08, 45494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 45594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 45694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 45794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x09, 45894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x09, 45994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RO, 46094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 46194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 46294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x0A, 46394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x12, 46494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 46594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 46694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 46794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x15, 46894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x19, 46994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 47094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 47194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 47294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x1B, 47394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x21, 47494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 47594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 47694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 47794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x27, 47894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x2C, 47994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 48094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 48194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 48294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x41, 48394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x41, 48494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 48594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 48694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 48794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x45, 48894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x5B, 48994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 49094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 49194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 49294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x5D, 49394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x5D, 49494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 49594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 49694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 49794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x69, 49894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x69, 49994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 50094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 50194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 50294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x6C, 50394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x6D, 50494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 50594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 50694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij { 50794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .first = 0x80, 50894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .last = 0x81, 50994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .perm = AB5500_PERM_RW, 51094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 51194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 51294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij }, 51394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij}; 51494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij 51594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleijstatic int ab5500_registers_print(struct seq_file *s, void *p) 51694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij{ 51794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij struct ab5500 *ab = s->private; 51894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij unsigned int i; 51994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij u8 bank = (u8)ab->debug_bank; 52094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij 52194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij seq_printf(s, "ab5500 register values:\n"); 52294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij for (bank = 0; bank < AB5500_NUM_BANKS; bank++) { 52394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij seq_printf(s, " bank %u, %s (0x%x):\n", bank, 52494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij bankinfo[bank].name, 52594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij bankinfo[bank].slave_addr); 52694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij for (i = 0; i < ab5500_reg_ranges[bank].nranges; i++) { 52794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij u8 reg; 52894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij int err; 52994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij 53094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij for (reg = ab5500_reg_ranges[bank].range[i].first; 53194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij reg <= ab5500_reg_ranges[bank].range[i].last; 53294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij reg++) { 53394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij u8 value; 53494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij 53594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij err = ab5500_get_register_interruptible_raw(ab, 53694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij bank, reg, 53794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij &value); 53894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij if (err < 0) { 53994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij dev_err(ab->dev, "get_reg failed %d" 54094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij "bank 0x%x reg 0x%x\n", 54194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij err, bank, reg); 54294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij return err; 54394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij } 54494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij 54594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij err = seq_printf(s, "[%d/0x%02X]: 0x%02X\n", 54694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij bank, reg, value); 54794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij if (err < 0) { 54894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij dev_err(ab->dev, 54994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij "seq_printf overflow\n"); 55094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij /* 55194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij * Error is not returned here since 55294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij * the output is wanted in any case 55394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij */ 55494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij return 0; 55594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij } 55694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij } 55794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij } 55894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij } 55994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij return 0; 56094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij} 56194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij 56294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleijstatic int ab5500_registers_open(struct inode *inode, struct file *file) 56394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij{ 56494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij return single_open(file, ab5500_registers_print, inode->i_private); 56594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij} 56694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij 56794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleijstatic const struct file_operations ab5500_registers_fops = { 56894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .open = ab5500_registers_open, 56994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .read = seq_read, 57094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .llseek = seq_lseek, 57194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .release = single_release, 57294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .owner = THIS_MODULE, 57394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij}; 57494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij 57594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleijstatic int ab5500_bank_print(struct seq_file *s, void *p) 57694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij{ 57794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij struct ab5500 *ab = s->private; 57894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij 57994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij seq_printf(s, "%d\n", ab->debug_bank); 58094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij return 0; 58194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij} 58294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij 58394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleijstatic int ab5500_bank_open(struct inode *inode, struct file *file) 58494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij{ 58594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij return single_open(file, ab5500_bank_print, inode->i_private); 58694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij} 58794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij 58894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleijstatic ssize_t ab5500_bank_write(struct file *file, 58994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij const char __user *user_buf, 59094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij size_t count, loff_t *ppos) 59194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij{ 59294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij struct ab5500 *ab = ((struct seq_file *)(file->private_data))->private; 59394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij char buf[32]; 59494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij int buf_size; 59594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij unsigned long user_bank; 59694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij int err; 59794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij 59894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij /* Get userspace string and assure termination */ 59994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij buf_size = min(count, (sizeof(buf) - 1)); 60094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij if (copy_from_user(buf, user_buf, buf_size)) 60194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij return -EFAULT; 60294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij buf[buf_size] = 0; 60394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij 60494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij err = strict_strtoul(buf, 0, &user_bank); 60594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij if (err) 60694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij return -EINVAL; 60794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij 60894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij if (user_bank >= AB5500_NUM_BANKS) { 60994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij dev_err(ab->dev, 61094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij "debugfs error input > number of banks\n"); 61194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij return -EINVAL; 61294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij } 61394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij 61494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij ab->debug_bank = user_bank; 61594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij 61694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij return buf_size; 61794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij} 61894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij 61994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleijstatic int ab5500_address_print(struct seq_file *s, void *p) 62094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij{ 62194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij struct ab5500 *ab = s->private; 62294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij 62394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij seq_printf(s, "0x%02X\n", ab->debug_address); 62494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij return 0; 62594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij} 62694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij 62794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleijstatic int ab5500_address_open(struct inode *inode, struct file *file) 62894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij{ 62994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij return single_open(file, ab5500_address_print, inode->i_private); 63094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij} 63194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij 63294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleijstatic ssize_t ab5500_address_write(struct file *file, 63394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij const char __user *user_buf, 63494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij size_t count, loff_t *ppos) 63594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij{ 63694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij struct ab5500 *ab = ((struct seq_file *)(file->private_data))->private; 63794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij char buf[32]; 63894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij int buf_size; 63994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij unsigned long user_address; 64094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij int err; 64194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij 64294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij /* Get userspace string and assure termination */ 64394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij buf_size = min(count, (sizeof(buf) - 1)); 64494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij if (copy_from_user(buf, user_buf, buf_size)) 64594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij return -EFAULT; 64694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij buf[buf_size] = 0; 64794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij 64894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij err = strict_strtoul(buf, 0, &user_address); 64994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij if (err) 65094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij return -EINVAL; 65194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij if (user_address > 0xff) { 65294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij dev_err(ab->dev, 65394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij "debugfs error input > 0xff\n"); 65494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij return -EINVAL; 65594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij } 65694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij ab->debug_address = user_address; 65794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij return buf_size; 65894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij} 65994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij 66094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleijstatic int ab5500_val_print(struct seq_file *s, void *p) 66194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij{ 66294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij struct ab5500 *ab = s->private; 66394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij int err; 66494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij u8 regvalue; 66594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij 66694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij err = ab5500_get_register_interruptible_raw(ab, (u8)ab->debug_bank, 66794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij (u8)ab->debug_address, ®value); 66894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij if (err) { 66994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij dev_err(ab->dev, "get_reg failed %d, bank 0x%x" 67094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij ", reg 0x%x\n", err, ab->debug_bank, 67194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij ab->debug_address); 67294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij return -EINVAL; 67394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij } 67494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij seq_printf(s, "0x%02X\n", regvalue); 67594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij 67694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij return 0; 67794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij} 67894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij 67994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleijstatic int ab5500_val_open(struct inode *inode, struct file *file) 68094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij{ 68194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij return single_open(file, ab5500_val_print, inode->i_private); 68294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij} 68394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij 68494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleijstatic ssize_t ab5500_val_write(struct file *file, 68594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij const char __user *user_buf, 68694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij size_t count, loff_t *ppos) 68794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij{ 68894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij struct ab5500 *ab = ((struct seq_file *)(file->private_data))->private; 68994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij char buf[32]; 69094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij int buf_size; 69194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij unsigned long user_val; 69294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij int err; 69394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij u8 regvalue; 69494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij 69594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij /* Get userspace string and assure termination */ 69694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij buf_size = min(count, (sizeof(buf)-1)); 69794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij if (copy_from_user(buf, user_buf, buf_size)) 69894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij return -EFAULT; 69994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij buf[buf_size] = 0; 70094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij 70194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij err = strict_strtoul(buf, 0, &user_val); 70294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij if (err) 70394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij return -EINVAL; 70494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij if (user_val > 0xff) { 70594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij dev_err(ab->dev, 70694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij "debugfs error input > 0xff\n"); 70794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij return -EINVAL; 70894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij } 70994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij err = ab5500_mask_and_set_register_interruptible_raw( 71094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij ab, (u8)ab->debug_bank, 71194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij (u8)ab->debug_address, 0xFF, (u8)user_val); 71294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij if (err) 71394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij return -EINVAL; 71494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij 71594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij ab5500_get_register_interruptible_raw(ab, (u8)ab->debug_bank, 71694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij (u8)ab->debug_address, ®value); 71794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij if (err) 71894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij return -EINVAL; 71994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij 72094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij return buf_size; 72194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij} 72294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij 72394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleijstatic const struct file_operations ab5500_bank_fops = { 72494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .open = ab5500_bank_open, 72594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .write = ab5500_bank_write, 72694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .read = seq_read, 72794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .llseek = seq_lseek, 72894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .release = single_release, 72994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .owner = THIS_MODULE, 73094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij}; 73194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij 73294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleijstatic const struct file_operations ab5500_address_fops = { 73394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .open = ab5500_address_open, 73494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .write = ab5500_address_write, 73594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .read = seq_read, 73694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .llseek = seq_lseek, 73794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .release = single_release, 73894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .owner = THIS_MODULE, 73994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij}; 74094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij 74194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleijstatic const struct file_operations ab5500_val_fops = { 74294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .open = ab5500_val_open, 74394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .write = ab5500_val_write, 74494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .read = seq_read, 74594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .llseek = seq_lseek, 74694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .release = single_release, 74794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij .owner = THIS_MODULE, 74894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij}; 74994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij 75094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleijstatic struct dentry *ab5500_dir; 75194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleijstatic struct dentry *ab5500_reg_file; 75294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleijstatic struct dentry *ab5500_bank_file; 75394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleijstatic struct dentry *ab5500_address_file; 75494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleijstatic struct dentry *ab5500_val_file; 75594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij 75694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleijvoid __init ab5500_setup_debugfs(struct ab5500 *ab) 75794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij{ 75894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij ab->debug_bank = AB5500_BANK_VIT_IO_I2C_CLK_TST_OTP; 75994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij ab->debug_address = AB5500_CHIP_ID; 76094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij 76194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij ab5500_dir = debugfs_create_dir("ab5500", NULL); 76294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij if (!ab5500_dir) 76394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij goto exit_no_debugfs; 76494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij 76594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij ab5500_reg_file = debugfs_create_file("all-bank-registers", 76694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij S_IRUGO, ab5500_dir, ab, &ab5500_registers_fops); 76794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij if (!ab5500_reg_file) 76894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij goto exit_destroy_dir; 76994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij 77094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij ab5500_bank_file = debugfs_create_file("register-bank", 77194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij (S_IRUGO | S_IWUGO), ab5500_dir, ab, &ab5500_bank_fops); 77294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij if (!ab5500_bank_file) 77394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij goto exit_destroy_reg; 77494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij 77594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij ab5500_address_file = debugfs_create_file("register-address", 77694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij (S_IRUGO | S_IWUGO), ab5500_dir, ab, &ab5500_address_fops); 77794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij if (!ab5500_address_file) 77894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij goto exit_destroy_bank; 77994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij 78094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij ab5500_val_file = debugfs_create_file("register-value", 78194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij (S_IRUGO | S_IWUGO), ab5500_dir, ab, &ab5500_val_fops); 78294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij if (!ab5500_val_file) 78394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij goto exit_destroy_address; 78494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij 78594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij return; 78694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij 78794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleijexit_destroy_address: 78894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij debugfs_remove(ab5500_address_file); 78994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleijexit_destroy_bank: 79094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij debugfs_remove(ab5500_bank_file); 79194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleijexit_destroy_reg: 79294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij debugfs_remove(ab5500_reg_file); 79394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleijexit_destroy_dir: 79494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij debugfs_remove(ab5500_dir); 79594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleijexit_no_debugfs: 79694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij dev_err(ab->dev, "failed to create debugfs entries.\n"); 79794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij return; 79894be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij} 79994be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij 80094be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleijvoid __exit ab5500_remove_debugfs(void) 80194be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij{ 80294be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij debugfs_remove(ab5500_val_file); 80394be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij debugfs_remove(ab5500_address_file); 80494be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij debugfs_remove(ab5500_bank_file); 80594be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij debugfs_remove(ab5500_reg_file); 80694be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij debugfs_remove(ab5500_dir); 80794be70d4b279ba1b35119a3340833ffcc798c2e2Linus Walleij} 808