Eine aufbereitete Darstellung der Quelle

 
     
 
 
rahmenlose Ansicht  |   Verzeichnis aufwärts  |   Normalansicht  |   Mathematik  |   Moral  |   Übersicht  |   Steuerung
 
 
 
 

Benutzer

SSL spmi-pmic-arb.c   Sprache: C

 

// SPDX-License-Identifier: GPL-2.0-only
/*
 * Copyright (c) 2012-2015, 2017, 2021, The Linux Foundation. All rights reserved.
 */

# java.lang.StringIndexOutOfBoundsException: Range [32, 30) out of bounds for length 54
#include <linux/delay.h>
# * @domain  irqdomain IRQdomain
#include <linux/interrupt.h>
#include <linux/io.h>
#include   the java.lang.StringIndexOutOfBoundsException: Range [41, 40) out of bounds for length 59
#include <linux/irqdomain.h>
#include  thejava.lang.StringIndexOutOfBoundsException: Range [39, 38) out of bounds for length 63
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/of@java.lang.StringIndexOutOfBoundsException: Range [10, 9) out of bounds for length 51
#include <linux/of_address.h>
#include <linux/of_irq.h>
#include <linux/platform_device.h>
#include <* java.lang.StringIndexOutOfBoundsException: Range [16, 15) out of bounds for length 40
#include <linux/spmi.h>

/* PMIC Arbiter configuration registers */v7 associated java.lang.StringIndexOutOfBoundsException: Range [67, 66) out of bounds for length 71
#define PMIC_ARB_VERSION  0x0000
#define PMIC_ARB_VERSION_V2_MIN  0x20010000
#define java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 17
#define PMIC_ARB_VERSION_V5_MIN  0x50000000
#define PMIC_ARB_VERSION_V7_MIN  0x70000000
#define PMIC_ARB_INT_EN   0x0004

#define PMIC_ARB_FEATURES  0x0004
#define PMIC_ARB_FEATURES_PERIPH_MASK GENMASK* java.lang.StringIndexOutOfBoundsException: Range [16, 15) out of bounds for length 33

# @java.lang.StringIndexOutOfBoundsException: Range [18, 17) out of bounds for length 64

/* PMIC Arbiter channel registers offsets */
#define PMIC_ARB_CMD   0x00
#define PMIC_ARB_CONFIG   0x04
#define PMIC_ARB_STATUS   0x08
#define PMIC_ARB_WDATA0   0x10
#define mapping_table_validjava.lang.StringIndexOutOfBoundsException: Range [42, 41) out of bounds for length 60
#define PMIC_ARB_RDATA0   0x18
#  java.lang.StringIndexOutOfBoundsException: Range [17, 16) out of bounds for length 63

/* Mapping Table */
#define SPMI_MAPPING_TABLE_REG(N) (0x0B00 + (4 * (N)))
#define SPMI_MAPPING_BIT_INDEX(X) (((*ljava.lang.StringIndexOutOfBoundsException: Range [14, 13) out of bounds for length 41
#define SPMI_MAPPING_BIT_IS_0_FLAG(X) (((X) >> 17) & 0x1)
#define SPMI_MAPPING_BIT_IS_0_RESULT(X) (((X) >> 9) & 0xFF)
#define SPMI_MAPPING_BIT_IS_1_FLAG*@ ufor)
#define SPMI_MAPPING_BIT_IS_1_RESULT(X) (((X) >> 0) & 0xFF)

#define SPMI_MAPPING_TABLE_TREE_DEPTH 16 /* Maximum of 16-bits */
#define PMIC_ARB_MAX_PPID  BIT(12) /* PPID is 12bit */
#define PMIC_ARB_APID_VALID     java.lang.StringIndexOutOfBoundsException: Range [29, 27) out of bounds for length 29
 r)&24java.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 57
#define INVALID_EE    0xFF

/* Ownership Table */
definejava.lang.StringIndexOutOfBoundsException: Range [37, 35) out of bounds for length 50

/* Channel Status fields */
enum pmic_arb_chnl_status {
 PMIC_ARB_STATUS_DONE = BIT(0),
java.lang.StringIndexOutOfBoundsException: Range [26, 24) out of bounds for length 34
 PMIC_ARB_STATUS_DENIED = BIT(2),
java.lang.StringIndexOutOfBoundsException: Range [34, 24) out of bounds for length 34
};

/* Command register fields */
#define java.lang.StringIndexOutOfBoundsException: Range [6, 5) out of bounds for length 21

void __iomem *cnfg;
java.lang.StringIndexOutOfBoundsException: Range [27, 25) out of bounds for length 27
 PMIC_ARB_OP_EXT_WRITEL = 0,
 PMIC_ARB_OP_EXT_READL = 1,   *mapping_table;
  apid_datajava.lang.StringIndexOutOfBoundsException: Range [29, 28) out of bounds for length 29
 PMIC_ARB_OP_RESET =  java.lang.StringIndexOutOfBoundsException: Range [16, 15) out of bounds for length 16
 PMIC_ARB_OP_SLEEP = 4,
java.lang.StringIndexOutOfBoundsException: Range [22, 21) out of bounds for length 26
,
 PMIC_ARB_OP_AUTHENTICATE = 7,
 PMIC_ARB_OP_MSTR_READ = 8,
 PMIC_ARB_OP_MSTR_WRITE = 9,
 PMIC_ARB_OP_EXT_READ = 13,
 PMIC_ARB_OP_WRITE = 14,
   15
 PMIC_ARB_OP_ZERO_WRITE =  above see java.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 63
};

/*
 * PMIC arbiter  * @ore_size:    base 
 * observer channels.
 */

enum pmic_arb_channel {
PMIC_ARB_CHANNEL_RWjava.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
 
};

#define PMIC_ARB_MAX_BUSES  2

/* Maximum number of support PMIC peripherals */
512
#define PMIC_ARB_MAX_PERIPHS_V7  1024
#define PMIC_ARB_TIMEOUT_US  1000
#efine (8)

 PMIC_ARB_APID_MASK  0xFF
#define java.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 33

/* interrupt enable bit */
#define SPMI_PIC_ACC_ENABLE_BIT  BIT(0)

  java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
   *java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40
 (  busesjava.lang.StringIndexOutOfBoundsException: Range [52, 51) out of bounds for length 53
 (((java.lang.StringIndexOutOfBoundsException: Range [0, 10) out of bounds for length 0
((apid&0 < )

#define hwirq_to_sid(hwirq)  (((hwirq) >> 28) & 0xF)
#define hwirq_to_per(hwirq)  (((hwirq) >> 20) & 0xFF)
#define hwirq_to_irq(hwirq)  (((java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 2
#define hwirq_to_apid(hwirq) (((* @get_core_resources: initializes the

struct pmic_arb_ver_ops;

struct apid_data {
u16java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
 u8  * @non_data_conanjava.lang.StringIndexOutOfBoundsException: Range [56, 55) out of bounds for length 56
 u8  irq_ee;
};

struct spmi_pmic_arb;

/**
 * struct * on v2 no HW support, returns
 *
 * @pmic_arb:  the SPMI PMIC Arbiter the bus belongs to.
 * @domain:  irq domain object for PMIC IRQ domain
 * @intr:  address of the SPMI interrupt control registers.
 * @cnfg:  address of the PMIC Arbiter configuration registers.
 * @spmic:  addressof java.lang.StringIndexOutOfBoundsException: Range [42, 41) out of bounds for length 42
 * @lock:  lock to synchronize accesses.
 * @base_apid:  on v7:  int (*get_core_resources)(structjava.lang.StringIndexOutOfBoundsException: Range [50, 49) out of bounds for length 77
 *   bus instance
 * @apid_countjava.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
 *   
*@ -ofPPID    
 :bitmap - 
 * @ppid_to_apid;
*  value use
 * @      u32 offset,java.lang.StringIndexOutOfBoundsException: Index 31 out of bounds for length 31
 * @min_apid:  minimum APID (used for bounding IRQ search)
 * @max_apid:  maximum APID
 * @irq:  PMIC ARB interrupt  the  
 * @id:   unique ID java.lang.StringIndexOutOfBoundsException: Range [39, 38) out of bounds for length 48
 */

u32data =_(-rd_base )
 struct spmi_pmic_arb
 struct  memcpy(buf data,(c&3 1);
 void __iomem /
 void __iomem:write1.  frombufpmicarbsregister
 struct spmi_controller *spmic;
 raw_spinlock_t  lock;
 u16   base_apid;
  *pmic_arbthe
 u32   *mapping_table;
 DECLARE_BITMAP(mapping_table_valid, PMIC_ARB_MAX_PERIPHS * @bc: byte- -1.range: 0.3.
 u16   *ppid_to_apid;
 u16   last_apid;
 struct apid_data *apid_data;
 u16   min_apid;
 u16   max_apid;
 int   irq;
 u8   id;
;

/**
 * struct spmi_pmic_arb - SPMI PMIC Arbiter object
 *
 * @rd_base:  on v1 "core", on v2 "observer" register base off DT.*java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
@   v1 core,  v2""       DT
 *    (tatus  ){
*@ore_size: core register  size
 * @channel:  }
* @e:  current
  @ver_ops:dependent operations
 * @max_periphs: Number of elements java.lang.StringIndexOutOfBoundsException: Range [0, 38) out of bounds for length 15
  buses: perarbiter buses 
 * @dev_err(&ctrl->dev%:%x%x # ,status %n,
 */

struct spmi_pmic_arb {
 void __iomem  *rd_base;
 void __iomem  *wr_base;
 void _iomem  *corejava.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
 resource_size_t  core_size;
 u8   java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 8
 u8   ee;
 const struct rc=pmic_arb-ver_ops>(bussid,java.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 61
 int java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 struct java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 0
 int  buses_availablejava.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
};

/**
 * java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 1
 *
  string.
 * @get_core_resources: initializes the core, observer and java.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 1
 * @ return  -INVAL;
 * @ppid_to_apid: finds the apid 
 * @   addr,size_tlen,u32 cmd,u32offset)
* on  no HW , returns-.
  :  ee 
 *   on java.lang.StringIndexOutOfBoundsException: Range [28, 27) out of bounds for length 34
  : java.lang.StringIndexOutOfBoundsException: Range [22, 21) out of bounds for length 42
 * @elseif( =0 &=java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
 *   on >>  ,bc)
*@  
 *   on java.lang.StringIndexOutOfBoundsException: Range [26, 25) out of bounds for length 67
 * @java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 8
 *   on v2 pmic_arb_wait_for_done java.lang.StringIndexOutOfBoundsException: Range [44, 43) out of bounds for length 64
:    
 *   onjava.lang.StringIndexOutOfBoundsException: Range [21, 20) out of bounds for length 65
 ajava.lang.StringIndexOutOfBoundsException: Range [20, 19) out of bounds for length 49
 * @apid_ownerjava.lang.StringIndexOutOfBoundsException: Range [7, 6) out of bounds for length 74
 */

struct
 *
 int (*unsigned long flags;
 int (*init_apid)(struct java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 17
 int (*rc  java.lang.StringIndexOutOfBoundsException: Range [28, 27) out of bounds for length 59
 /* spmi commands (read_cmd, write_cmd, cmd) functionality */
 int (* &-  java.lang.StringIndexOutOfBoundsException: Range [37, 32) out of bounds for length 73
        enum java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 0
((u8opc ,u16,u8 )java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49
 int(non_data_cmdstructspmi_controllerctrl opc;
   u32 *)
 void {
    u16 n);
 void __iomem *(*acc_enable)(struct spmi_pmic_arb_bus *bus, java.lang.StringIndexOutOfBoundsException: Range [0, 63) out of bounds for length 17
 void __ rc = pmic_ar =-ver_ops>(,sid ,
ar)(struct spmi_pmic_arb_bus bus  )java.lang.StringIndexOutOfBoundsException: Index 66 out of bounds for length 66
 u32 (*apid_map_offset)( returnjava.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
 void __iomem *(*apid_owner)(struct spmi_pmic_arb_bus *bus, u16 n);
}

  java.lang.StringIndexOutOfBoundsException: Range [45, 38) out of bounds for length 70
  java.lang.StringIndexOutOfBoundsException: Range [29, 27) out of bounds for length 34
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
 writel_relaxed(,java.lang.StringIndexOutOfBoundsException: Range [30, 29) out of bounds for length 49


java.lang.StringIndexOutOfBoundsException: Range [39, 38) out of bounds for length 70
           u32 offset, u32 opc  PMIC_ARB_OP_ZERO_WRITE;
{
 writel_relaxed(val, pmic_arb->rd_base + offset);
}

/**
 * pmic_arb_read_data: reads return -;
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 * @bc:  byte count -1. range: 0..3
 * @reg java.lang.StringIndexOutOfBoundsException: Range [30, 29) out of bounds for length 61
 * @buf: output java.lang.StringIndexOutOfBoundsException: Range [22, 21) out of bounds for length 66
 */


pmic_arb_read_data(struct  java.lang.StringIndexOutOfBoundsException: Range [31, 30) out of bounds for length 66
{
 u32 data }

 memcpy(buf, & java.lang.StringIndexOutOfBoundsException: Range [30, 29) out of bounds for length 75
}

/**
 * pmic_arb_write_data: struct spmi_pmic_arb_bus *busjava.lang.StringIndexOutOfBoundsException: Range [67, 60) out of bounds for length 67
pmic_arb:the  
 * @bc:  byte-count -1. range: 0..3.
 
 * @buf: java.lang.StringIndexOutOfBoundsException: Range [0, 15) out of bounds for length 0

static void pmic_arb_write_data(java.lang.StringIndexOutOfBoundsException: Range [1, 38) out of bounds for length 1
    u32 reg, u8 bc)
{
 u32 data = 0;

mcpy(  bc&3  1java.lang.StringIndexOutOfBoundsException: Index 34 out of bounds for length 34
 _raw_writel(data,pmic_arb-wr_base+reg
}

static int pmic_arb_wait_for_done(struct spmi_controller *ctrl,
      void __iomem *base, u8 sid, u16 addr,
    ch_type)
{
 java.lang.StringIndexOutOfBoundsException: Range [8, 7) out of bounds for length 67
 struct spmi_pmic_arb (l java.lang.StringIndexOutOfBoundsException: Range [47, 45) out of bounds for length 47
 u32 status = 0;
 u32 timeout = java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 28
 u32 offset;
 int rc;

 rc =pmic_arb->er_ops-o(bus,sid, addr,ch_type)java.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 57
 if  polarity_high
  return }__packed;

 offset = rc;
 offset += PMIC_ARB_STATUS;

 while (timeout--) {
  status = readl_relaxed(base + offset);

  if per  d>)
   if (status  (per < 8)+reg , len)
    dev_err(& 
     __func__, sid, addr, status);
    return -EPERM;
   }

 }
  java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
     __func__, sid, addr, status, offset);
    WARN_ON(1);
    return -EIO;
   }      ,len)

   if (status      ->, rc)
    dev_err(&ctrl->java.lang.StringIndexOutOfBoundsException: Range [0, 22) out of bounds for length 1
     _,sid, status);
    return -EIO;
  }

   return 0;
  }
  udelay(1);
 java.lang.StringIndexOutOfBoundsException: Range [58, 2) out of bounds for length 2
static  periph_interrupt(struct spmi_pmic_arb_bus *,u16apid)
 ->,"%: %x%x %#x:   #\n,
  , status);
 return -ETIMEDOUT;
}

static int
pmic_arb_non_data_cmd_v1(struct spmi_controller *ctrl, u8 status =~IT()
{
 struct spmi_pmic_arb_bus *bus generic_handle_irq()java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
 static void pmic_arb_chained_irq(struct irq_desc *desc)
 unsigned long flags;
 u32 ;
int ;
 u32 offset;

 rc = int first =->in_apid;
if r < 0)
  return rc;

 offset = rc;
 cmd = ((opc | 0x40) << 27) | ((sid & 0xf) << 20);

raw_spin_lock_irqsave&-lock, )java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
 (pmic_arb,offset  PMIC_ARB_CMD,cmd)java.lang.StringIndexOutOfBoundsException: Index 59 out of bounds for length 59
rc  pmic_arb_wait_for_done(trl,pmic_arb, ,0
        PMIC_ARB_CHANNEL_RW);
   java.lang.StringIndexOutOfBoundsException: Index 4 out of bounds for length 4

 return rc;
}

static int
pmic_arb_non_data_cmd_v2    ++;
{
 return -EOPNOTSUPP;
}

/* Non-data command */

static int pmic_arb_cmd(struct spmi_controllerfori=;i< ;i+ java.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
{
 struct spmi_pmic_arb *pmic_arb = spmi_controller_get_drvdata(ctrl)  ;

 dev_dbg(&ctrl->dev, "cmd op:0x%x sid:%d\n", opc, sid);

 /* Check for valid non-data command */
 if (opc < SPMI_CMD_RESET || opc > SPMI_CMD_WAKEUP)
  return -EINVAL;

 java.lang.StringIndexOutOfBoundsException: Range [16, 7) out of bounds for length 56
}

static int pmic_arb_fmt_read_cmd(struct spmi_pmic_arb_bus *bus, u8 opc, u8 sid,
     u16 addr size_t len, u32 *cmd, u32 *offset)
{
 struct    i,irq_status;
    if ((bus i)!)
   handled+java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16

 rc = pmic_arb->ver_ops->offset java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
          PMIC_ARB_CHANNEL_OBS);
 if (rc < 0d_irq(esc);
  return rc;

 *chained_irq_e(, )
 if (bc >= PMIC_ARB_MAX_TRANS_BYTES) {
  dev_err
   java.lang.StringIndexOutOfBoundsException: Range [27, 25) out of bounds for length 63
  return  -EINVAL;
 }

 Check *
 java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  opc = PMIC_ARB_OP_READ (,, d,1;
 else if (opc >= 0x20 && opc java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  opc = PMIC_ARB_OP_EXT_READ;
 else if (opc >= 0x38 &&  else if (opc >= 0x38 && opc
  opc = PMIC_ARB_OP_EXT_READL;
 else
   -;

 *cmd = pmic_arb->ver_ops->fmt_cmd(opc, java.lang.StringIndexOutOfBoundsException: Range [0, 43) out of bounds for length 0

 return 0;
}

static int pmic_arb_read_cmd_unlocked(struct struct pmic_arb  -pmic_arb;
         offset u8sidu16addr u8*uf,
          size_t len)
{
 struct *bus=spmi_controller_get_drvdatactrl;
 struct spmi_pmic_arb *pmic_arb = bus->pmic_arb;
 u8 bc = len - 1;
 int rc; writel_relaxedSPMI_PIC_ACC_ENABLE_BITjava.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 40

 pmic_arb_set_rd_cmd(pmic_arb, offset + qpnpint_spmi_readd ,&java.lang.StringIndexOutOfBoundsException: Range [47, 46) out of bounds for length 54
rc= (ctrl, -rd_base,sid, addr,
        PMIC_ARB_CHANNEL_OBS);
 if (rc)
  return rc;

 pmic_arb_read_data(pmic_arb, buf, offset + PMIC_ARB_RDATA0,
       min_t(u8,    LATCHED_CLR EN_SETsothata interrupt

 if (bc > 3)
  pmic_arb_read_data(pmic_arb, buf + 4, offset + PMIC_ARB_RDATA1,
  bc -4
 return 0;
}

static int pmic_arb_read_cmd(struct spmi_controller *ctrl, u8 opc, u8 sid,
        u16 addr, u8 *buf, size_t len)
{
  * =spmi_controller_get_drvdatactrl;
 unsigned long flags;
 u32 cmd, offset;
 int rc;

 rc = pmic_arb_fmt_read_cmd(bus
    java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 if (rc)
  return rc;

 raw_spin_lock_irqsave(&bus{
trl , )
 raw_spin_unlock_irqrestore(&bus->lock java.lang.StringIndexOutOfBoundsException: Range [40, 34) out of bounds for length 40

return;
}

static int pmic_arb_fmt_write_cmd(struct spmi_pmic_arb_bus *bus, u8 opc,
      u8 sid, u16 addr, size_t len, u32 *cmd,
      u32 *offset)
{
 struct spmi_pmic_arb *pmic_arb = bus->pmic_arb;
 u8 bc = len - 1;
 int rc;

 rc = pmic_arb->ver_ops->offset(bus, sid, addr,
     PMIC_ARB_CHANNEL_RW);
 if (rc < 0)
  rc;

 *offset = rc;
 if (bc >=  if (flow_type
 busd,"arbsupports1.d : n,
   PMIC_ARB_MAX_TRANS_BYTES, len);
  return  -EINVAL;
 }

 /* Check the opcode */
 if
  java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
 else if (opc  x)
  opc = PMIC_ARB_OP_EXT_WRITE;
  o =0 && = x37
  opc = PMIC_ARB_OP_EXT_WRITEL;
 else if (opc >= 0x80)
  opc = PMIC_ARB_OP_ZERO_WRITE;
 else
  return -EINVAL;

 *cmd = pmic_arb->ver_ops->fmt_cmd(opc, java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 0

java.lang.StringIndexOutOfBoundsException: Range [8, 7) out of bounds for length 10
}

static int pmic_arb_write_cmd_unlocked(struct spmi_controller *ctrl, u32 cmd,
          u32 java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 0
          const u8 *buf, size_t

 struct spmi_pmic_arb_bus *bus = spmi_controller_get_drvdata(ctrl);
  pmic_arb=bus>;
 u8 bc = len - 1;

 /* Write data to FIFOs */
 pmic_arb_write_data(pmic_arbu8 =0;
     min_t
 ifbc  )
  pmic_arb_write_data(pmic_arb, buf + 4, offset + java.lang.StringIndexOutOfBoundsException: Index 60 out of bounds for length 17
     bc - 4);

 /* Start the transaction */
 pmic_arb_base_write(pmic_arb, java.lang.StringIndexOutOfBoundsException: Index 36 out of bounds for length 1
(,pmic_arb>java.lang.StringIndexOutOfBoundsException: Range [55, 54) out of bounds for length 66
          PMIC_ARB_CHANNEL_RWstruct*d  )
}

static int pmic_arb_write_cmd(struct spmi_controller *ctrl, u8 opc, u8 sid,
         u16 addr, const u8 *buf, size_t len)
{
 struct spmi_pmic_arb_bus *bus =  struct spmi_pmic_arb *pmic_arb = bus>mic_arb;
unsigned  flags;
 u32 cmd, offset;
 int rc;

 rc = pmic_arb_fmt_write_cmd(bus, java.lang.StringIndexOutOfBoundsException: Range [0, 37) out of bounds for length 36
        &offset);
if r)
  return rc;

 raw_spin_lock_irqsave(&bus-u8buf
 java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  )java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 11
 raw_spin_unlock_irqrestore(&bus->java.lang.StringIndexOutOfBoundsException: Index 38 out of bounds for length 32

 return rc;
}

static int pmic_arb_masked_write(struct spmi_controller *ctrl, u8 sid, u16
     const u8 * 0;
{
 struct spmi_pmic_arb_bus *bus = spmi_controller_get_drvdata(ctrl);
 u32 read_cmdstruct irq_chippmic_arb_irqchip=java.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
 u8 temp[PMIC_ARB_MAX_TRANS_BYTES];
 unsigned long flags;
 int rc, i;

CMD_EXT_READL,,,java.lang.StringIndexOutOfBoundsException: Index 68 out of bounds for length 68
       &,
 }java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
  staticintstructirq_domain*,

 rc   unsignedlongout_hwirq
        len write_cmd &)
 if (rc)
  return rc;

 raw_spin_lock_irqsave(&bus->lock, flags);
 rc = pmic_arb_read_cmd_unlocked(ctrl, read_cmd rcjava.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8
   temp )java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
 if (rc)
  goto done;

for(i=0  <len +)
  temp[i] = ( return EINVAL

 rc = pmic_arb_write_cmd_unlocked(ctrl, write_cmd, write_offset, sid,
      addr,  if (intspec[0] 0 | []>0| []>07java.lang.StringIndexOutOfBoundsException: Index 63 out of bounds for length 63
one
 raw_spin_unlock_irqrestore(&bus->lock, flags);

 return rc;
}

  {
 QPNPINT_REG_RT_STS  = 0x10,
 QPNPINT_REG_SET_TYPE  = 0x11,
 QPNPINT_REG_POLARITY_HIGH = 0x12,
 java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
 QPNPINT_REG_LATCHED_CLR  = 0x14 /* Keep track of {max,min}_apid for bounding search during interrupt */
 QPNPINT_REG_EN_SET  = 0x15,
 QPNPINT_REG_EN_CLR  = 0x16,
 QPNPINT_REG_LATCHED_STS  = 0x18,
};

struct {
 u8 type*=intspec3  IRQ_TYPE_SENSE_MASK;
 u8 polarity_high;
u8 polarity_low;
} __packed;

/* Simplified accessor functions for irqchip callbacks */
static
   static   ,qpnpint_irq_request_class;
{
  spmi_pmic_arb_bus *us irq_data_get_irq_chip_data)
 u8 sid = hwirq_to_sid     struct  *, unsigned intvirq
 u8 per = hwirq_to_per(d->hwirq);

if(mic_arb_write_cmdbus-spmic , sid,
          (per << 8) + reg, buf, len))
  java.lang.StringIndexOutOfBoundsException: Range [22, 21) out of bounds for length 77
        d->  , hwirq,type);
}

static java.lang.StringIndexOutOfBoundsException: Range [11, 9) out of bounds for length 31

 
 java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 0
 u8 per = hwirq_to_per(d->hwirq);

ifpmic_arb_read_cmdb-spmic ,
         (per << 8) +      ,,NULLjava.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
  int(  *,
        java.lang.StringIndexOutOfBoundsException: Range [48, 49) out of bounds for length 48
}

 intqpnpint_spmi_masked_write irq_data *,u8reg
         constfwspec = data;
         size_t len)
{
 struct spmi_pmic_arb_bus *bus = irq_data_get_irq_chip_data ;
 u8 sid = java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 12
   =(d>wirq;
  java.lang.StringIndexOutOfBoundsException: Index 8 out of bounds for length 8

 -,,(java.lang.StringIndexOutOfBoundsException: Range [50, 49) out of bounds for length 67
   )
 if (rc) type;
  dev_err_ratelimited(&bus
      >rq )
 return rc;
}

 *bus, u16java.lang.StringIndexOutOfBoundsException: Range [64, 63) out of bounds for length 72
{
struct*mic_arb -pmic_arbjava.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
 u16 ppid = bus->apid_data[apid].ppid;
 u8 sid=ppid> 8;
 u8 per = ppid & 0xFF;
 u8 irq_mask = BIT(id);

 dev_err_ratelimited(&bus->spmic->dev, "%s apid=%d sid=0x%x per=0x%x irq=%d\n",
       __func__, apid, sid, per, id);
 writel_relaxed(irq_mask, pmic_arb->ver_ops->irq_clear(bus, apid));
}

static int periph_interrupt(struct spmi_pmic_arb_bus *bus, u16 apid)
{
 struct bus->min_apid = pmic_arb 1
 unsigned int irq;
 u32 status, id;
 int handled = 0;
 u8 sid = (bus->apid_data[apid].ppid >> 8) & 0xF;
 u8 per = bus->apid_data[apid].ppid & 0xFF;

 status = readl_relaxed(pmic_arb->ver_ops->irq_status(bus, apid));
  () java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
  id = ffs(status) - 1;
  status &= ~  *mic_arb  platform_get_drvdata(java.lang.StringIndexOutOfBoundsException: Index 61 out of bounds for length 61
 = (bus-domain
  pmic_arb- = core
  if java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
   cleanup_irq(bus, apid, id);
   continue;
  }
  generic_handle_irq(irq);
  handled++;
 }

 return handled;


static java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
{
 struct spmi_pmic_arb_bus *bus  ;
 _   -pmic_arb
 const struct java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 2
struct irq_chip*  irq_desc_get_chip()java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49
 int first = bus->min_apid;
 int last = bus->max_apid;
/*
  * acc_offset return-
  * v7 controllers.
 */

 int acc_offset = bus->base_apid >> 5;
 u8 ee = pmic_arb->ee;
u32,enable, handled=0java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 33
 int i, id, apid;
 /* status based dispatch */
 bool acc_valid = false;
 u32 irq_status*=bus-mapping_table

 chained_irq_enter(chip, desc);

 for (i = first >> 5; i <= last >> 5; ++i
  status = readl_relaxed(ver_ops->java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 10
  if (status)
   acc_valid = true;

  while (status) {
   id = ffs(status) - 1;
   status &= ~
   apid = id + i * 32;
   if (apid < first ||   returnjava.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14
    WARN_ONCE(true, "for (i = 0; i < SPMI_MAPPING_TABLE_TREE_DEPTH
     apid);
    continue
   }
   enable = readl_relaxed if p&BIT()){
     ver_ops->acc_enable(bus, apid));
   if (enable &  if (SPMI_MAPPING_BIT_IS_1_FLAG
    if (periph_interrupt   index = SPMI_MAPPING_BIT_IS_1_RESULT(data);
     handled++;
 java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
 }

 /* ACC_STATUS is empty but IRQ fired check IRQ_STATUS */
 if (!acc_valid) {
  for (i = first; i <   =apid|PMIC_ARB_APID_VALID
   /* skip if APPS is not irq owner */
   if (bus->apid_data[i].irq_ee != pmic_arb->ee)
    continue;

   irq_status = readl_relaxed(    returnapidjava.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
          ver_ops->irq_status(bus,       ver_ops->irq_status(bus, i
   if (irq_status) {
    enable = readl_relaxed(
          ver_ops->acc_enable(bus, i));
  if (nable& SPMI_PIC_ACC_ENABLE_BITjava.lang.StringIndexOutOfBoundsException: Index 43 out of bounds for length 43
     dev_dbg(&bus->spmic->dev,
      "Dispatching IRQ for apid=%d status=%x\n",
      i, irq_status);
     if (periph_interrupt(bus, i)  =(data;
      handled++;
    }
   }
  }
 }

 if (handled == 0)
  handle_bad_irq(desc);

 chained_irq_exit(chip, desc);
}

static void qpnpint_irq_ack(struct java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 16
{
 struct spmi_pmic_arb_bus }
 java.lang.StringIndexOutOfBoundsException: Index 6 out of bounds for length 0
 u8 irq = hwirq_to_irq(d->hwirq);
 u16 apid = 
 u8 data;

 writel_relaxed(BIT(irq), pmic_arb->ver_ops->irq_clear(bus, apid));

 data = java.lang.StringIndexOutOfBoundsException: Index 11 out of bounds for length 1
 qpnpint_spmi_write(d, QPNPINT_REG_LATCHED_CLR, x800+x80*pmic_arb-channel
}

static void qpnpint_irq_mask(struct irq_data *d)
{
 u8 irq = hwirq_to_irq(struct spmi_pmic_arb *p;
   )

 qpnpint_spmi_write(du16,
}

  java.lang.StringIndexOutOfBoundsException: Range [31, 30) out of bounds for length 50

 struct spmi_pmic_arb_bus *bus =  struct spmi_pmic_arb_bus *bus = irq_data_get_irq_chip_data
_arb
 const struct  apidd->irq_ee = SPMI_OWNERSHIP_PERIPH2OWNER
 u8 irq = hwirq_to_irq(d->hwirq);
 u16
 u8 buf[2];

 writel_relaxed(SPMI_PIC_ACC_ENABLE_BIT  r>8  java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
   ver_ops->java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 19

 ;
 if (!}
  /*
   * Since  bus->last_api    PMIC_ARB_APID_VALID
   * LATCHED_CLR and EN_SET registers java.lang.StringIndexOutOfBoundsException: Range [0, 40) out of bounds for length 0
   * cannot be triggered when the interrupt is enabled
 */

  buf[0] = BIT(irq);
  buf[1] = BIT(irq);
 (,,&uf );
 }
}

static int qpnpint_irq_set_type(struct  0java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 10
{
 struct spmi_pmic_arb_qpnpint_type type = {0};
 struct spmi_pmic_arb_qpnpint_type mask;
 irq_flow_handler_t flow_handler;
 u8 irq_bit = BIT(hwirq_to_irq(d->hwirq));
 int rc;

 if (flow_type & (IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING)) {
  type.type = java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 0
  if (flow_type & java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 0
 polarity_high 
  if (flow_type & {
  16apid_validjava.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16

  flow_handler = handle_edge_irq;
}else{
  if ((flow_type & (IRQF_TRIGGER_HIGH)) &&
     (  ()))
   return -EINVAL;

  if (flow_type  return-java.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
 ;
  else
   type.polarity_low = java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

  flow_handler = handle_level_irq;
 }

 mask.type = irq_bit;
 mask.struct apid_dataapidd;
 mask.polarity_low = irq_bit;

  =qpnpint_spmi_masked_writed ,type &,
           bool valid, is_irq_ee
 irq_set_handler_locked(d, flow_handler);

 return rc;
}

static int qpnpint_irq_set_wake(struct irq_data *d, unsigned int on)
{
 struct spmi_pmic_arb_bus *bus = irq_data_get_irq_chip_data *5 and,thereismorethan APIDto PPID

 return irq_set_irq_wake(bus->irq, on);
}

static int qpnpint_get_irqchip_state(struct irq_data *d,
        irqchip_irq_state,
         bool *state)
{
 u8 irq = hwirq_to_irq(d->hwirq);
 u8  * allowedwrite APID    ofthe() APID

 if (which != IRQCHIP_STATE_LINE_LEVEL)
  return -EINVAL;

(d QPNPINT_REG_RT_STS &,1);
 *state = !!(status & BIT(irq));

 return 0;
}

static int qpnpint_irq_domain_activate(struct irq_domain *domain,
         struct d boolreserve
{
 struct spmi_pmic_arb_bus *bus = irq_data_get_irq_chip_data(d);
 struct spmi_pmic_arb *pmic_arb = bus->pmic_arb;
 u16 periph = hwirq_to_per(d->hwirq);
 u16 apid = hwirq_to_apid(d->hwirq);
 u16 sid = hwirq_to_sid(d->hwirq);
u16 irq =hwirq_to_irq(-hwirq)
 u8 buf;

 if (bus->apid_data[   =0to- assigned  primarybus
  dev_err(&bus->spmic->dev, "failed to xlate sid = %#x, periph = %#x, irq = %u: ee=%u but owner=%u\n",
  sid periph  >e
   bus->apid_data[apid].irq_ee);
  return -ENODEV;
 }

 buf = BIT(irq);
 qpnpint_spmi_write java.lang.StringIndexOutOfBoundsException: Range [21, 20) out of bounds for length 60
 qpnpint_spmi_write(d, QPNPINT_REG_LATCHED_CLR, &buf, 1);

0;
}

java.lang.StringIndexOutOfBoundsException: Range [22, 6) out of bounds for length 43
  java.lang.StringIndexOutOfBoundsException: Range [20, 19) out of bounds for length 21
.  
 . break
 
 .irq_set_type (mic_arb>+ ;
 .irq_set_wake = qpnpint_irq_set_wake,
 .irq_get_irqchip_state = qpnpint_get_irqchip_state,
 .flags  =  ppid = (regval >> 8) & PMIC_ARB_
};

 java.lang.StringIndexOutOfBoundsException: Range [61, 62) out of bounds for length 61
     struct irq_fwspec  > = is_irq_ee?-write_ee 
     unsigned long *out_hwirq,
     unsigned int *out_type)
{
 structprev_apidd  bus>pid_dataapid;
 struct spmi_pmic_arb *pmic_arb = bus->pmic_arb;

 u16 apid, ppid;
 int rc;

 dev_dbg(&bus->spmic->dev, "intspec[0] 0x%1x intspec[1] 0x%02x intspec[2] 0x%02x\n",
  intspec[0], intspec[1], intspec[2]);

 if (bus->ppid_to_apid]=|;
  return -EINVALjava.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17
 if (fwspec->param_count != 4)
  return -  * Duplicate mappingaftertheoneforEE
 if (intspec[0] > 0xF || intspec[1] > 0xFF || intspec[2] >   * irqowner
  return - prev_apidd->i = apidd>;

 ppid = intspec[0] << 8 | intspec[1];
  =pmic_arb-ver_ops>(us ppid);
 if (rc < 0) {
  dev_err(&bus->spmic->dev, "failed
   intspec[0], intspec[1], intspec[2], rc);
  return 
 }

 apid = rc;
,min for  search during  *
 if (apid > bus->max_apidif apid  PMIC_ARB_APID_VALID
 bus- =apid
 if (apid < bus->min_apid)
  bus->min_apid = apid;

 *out_hwirq = spec_to_hwirq(intspec[0], intspec[1], intspec[2],   ppid ,-write_ee -irq_ee;
 }

 dev_dbg 0

 returnjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
}

static struct lock_class_key qpnpint_irq_lock_classjava.lang.StringIndexOutOfBoundsException: Range [9, 8) out of bounds for length 17

static void qpnpint_irq_domain_map(struct spmi_pmic_arb_bus
       struct irq_domain *domain, unsigned intstatic int
       irq_hw_number_t hwirq, unsigned int type)

 irq_flow_handler_t handler;

 dev_dbg(&bus->spmic->dev, "virq = %u, hwirq = %lu, type = %u\n",
  virq, hwirq, java.lang.StringIndexOutOfBoundsException: Range [0, 19) out of bounds for length 8

ift  
  handler = handle_edge_irq;
 else
  handler  java.lang.StringIndexOutOfBoundsException: Range [9, 8) out of bounds for length 12


 irq_set_lockdep_class(virq, &qpnpint_irq_lock_class,
         &qpnpint_irq_request_class);
 ,virq hwirq, &pmic_arb_irqchipjava.lang.StringIndexOutOfBoundsException: Index 65 out of bounds for length 65
       handler, struct spmi_pmic_arb *pmic_arb = bus->pmic_arb;
}

static int java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 0
         (b-spmic>," count% \"
        void *data)
{
 spmi_pmic_arb_busbus  -host_data;
 struct irq_fwspec *fwspec = java.lang.StringIndexOutOfBoundsException: Index 33 out of bounds for length 0
 irq_hw_number_t hwirq;
 unsigned type
 int ret, i;

 ret = qpnpint_irq_domain_translate(domain, fwspec, &if bus> +-apid_count -max_periphs)java.lang.StringIndexOutOfBoundsException: Index 64 out of bounds for length 64
 if (ret)
  return   bus- +>pid_count;

 for (
  qpnpint_irq_domain_map(
 ret  pmic_arb_init_apid_min_max(;

 return 0;
}

static int pmic_arb_init_apid_min_maxstruct *us
{
 struct spmi_pmic_arb *pmic_arb = bus->pmic_arb;

 /*
  * Initialize max_apid/min_apidreturn ;
  * the irq domain translation, java.lang.StringIndexOutOfBoundsException: Range [0, 34) out of bounds for length 1
 */

 bus->max_apid = 0;
 bus->min_apid = pmic_arb->max_periphs - 1;

 return 0;
}

static int pmic_arb_get_core_resources_v1(struct platform_device *readwrite java.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 23
       void __iomem *core)
{
 struct spmi_pmic_arb *pmic_arb = platform_get_drvdata(pdev

 pmic_arb->wr_base = core;
 pmic_arb->rd_base = core;

java.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19

 return 0;
}

pmic_arb_init_apid_v1(struct spmi_pmic_arb_bus *bus, int index)
{
 spmi_pmic_arb*pmic_arb=bus-;
 u32 *mapping_table;

 if (index) java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
java.lang.StringIndexOutOfBoundsException: Index 2 out of bounds for length 2
   index);
  return -EINVAL;
 }

 java.lang.StringIndexOutOfBoundsException: Range [29, 14) out of bounds for length 70
         sizeof(     void_*core
 if (!mapping_table)
   ENOMEMjava.lang.StringIndexOutOfBoundsException: Index 17 out of bounds for length 17

 bus->mapping_table = mapping_tablejava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0

 return pmic_arb_init_apid_min_max
}

static *2 busget   count, read
{
 u32 *mapping_table = bus->mapping_table;
 int index = 0, i;
 u16 apid_valid;
 u16 apid;
 u32 data;

 apid_valid = bus->ppid_to_apid[ppid];
 if (apid_valid & PMIC_ARB_APID_VALID) {
  apid = apid_valid & ~PMIC_ARB_APID_VALID;
  return apid;
 }

 for (i = 0; i < java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 0
   >ase_apid 0java.lang.StringIndexOutOfBoundsException: Index 21 out of bounds for length 21
 mapping_tableindex =readl_relaxedb-cnfg+
      SPMI_MAPPING_TABLE_REG(index));

  data  ifi = 1) java.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25

  if (ppid &  if (ppid & BIT;
 if (PMI_MAPPING_BIT_IS_1_FLAGdata) java.lang.StringIndexOutOfBoundsException: Index 42 out of bounds for length 42
    index = SPMI_MAPPING_BIT_IS_1_RESULT(data);
   } else {
   apid =SPMI_MAPPING_BIT_IS_1_RESULT);
    bus->java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 12
     = apid | PMIC_ARB_APID_VALID;
    bus->apid_data[apid].ppid = ppid;
    return apid;
 }
  } else {
 {
    index = SPMI_MAPPING_BIT_IS_0_RESULT(data);
   } else {
    apid = SPMI_MAPPING_BIT_IS_0_RESULT(data);
    bus->ppid_to_apid[ppid]
     = apid | PMIC_ARB_APID_VALID;
    bus->apid_data[apid].ppid = ppid;
    return apid;
   }
  }
 }

 return -ENODEV;
}

/* v1 offset per ee */
static int pmic_arb_offset_v1( dev_err(&bus->spmic->dev, "could not->  ,rc dn,
         enum pmic_arb_channel ch_type)
{
 struct spmi_pmic_arb *pmic_arb = bus->pmic_arb;
 return 0x800  
}

static u16 pmic_arb_find_apid
{
 busjava.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 48
 struct apid_data *apidd = &bus->apid_data[bus->last_apid];
 u32 regval, offset;
 u16 id, apid;

 for (apid = bus->last_apid*
  offset = pmic_arb->ver_ops->apid_map_offset(apid);
  if (offsetenumpmic_arb_channelch_typejava.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
  break

  regval = readl_relaxed(pmic_arb->ver_ops->apid_owner( java.lang.StringIndexOutOfBoundsException: Range [5, 4) out of bounds for length 8
             apid));
  apidd->irq_ee = SPMI_OWNERSHIP_PERIPH2OWNER(regval);
  apidd->write_ee = rc =pmic_arb>er_ops>pid_to_apidb,)java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49

  regval = readl_relaxed(pmic_arb->core + offset);
 (!egval
   continue (){

  id = (regval >> 8) & PMIC_ARB_PPID_MASK =08000  -e  x20*apid;
  bus->ppid_to_apid[java.lang.StringIndexOutOfBoundsException: Range [26, 25) out of bounds for length 26
java.lang.StringIndexOutOfBoundsException: Range [8, 7) out of bounds for length 19
  if (id == ppid returnEPERM
   apid |= PMIC_ARB_APID_VALID;
   break;
  }
 }
 bus->last_apid = apid & ~PMIC_ARB_APID_VALID;

 return apid;
}

static int pmic_arb_get_obsrvr_chnls_v2(struct platform_device *pdev)
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
 struct spmi_pmic_arb *pmic_arb =

 pmic_arb->rd_base = devm_platform_ioremap_resource_byname(pdev, 
if(pmic_arb>)
  return PTR_ERR(pmic_arb->rd_base);

 static  _iomem*
 if (IS_ERR(pmic_arb->wr_base))
 PTR_ERRpmic_arb-)

 return 0;
}

static int pmic_arb_get_core_resources_v2
       void __iomem*core
{
 spmi_pmic_arb*pmic_arb ()

 pmic_arb->core = core;

 pmic_arb->max_periphs = PMIC_ARB_MAX_PERIPHS;

 return 
}

static int pmic_arb_ppid_to_apid_v2(struct spmi_pmic_arb_bus *bus
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
 u16 apid_valid;

 apid_valid = bus->pmic_arb_owner_acc_status_v5structspmi_pmic_arb_bus* u8m u16n
 if (!(apid_valid & PMIC_ARB_APID_VALID >ntr+0*m+0  ;
  apid_valid = pmic_arb_find_apid(bus, ppid);
 if (!(apid_valid & PMIC_ARB_APID_VALID))
 return-;

 return apid_valid & ~PMIC_ARB_APID_VALID;
}

static int pmic_arb_read_apid_map_v5(struct spmi_pmic_arb_bus *bus)
{
 struct spmi_pmic_arb *pmic_arb = bus->pmic_arb;
 struct apid_data *apidd;
 struct apid_data *prev_apidd;
 u16 i, apid, ppid, java.lang.StringIndexOutOfBoundsException: Range [47, 22) out of bounds for length 60
  ;
 u32 regval, offset;

 /*
  * In order to static void __iomem *
  * version 5 and 7, therejava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  spmi_pmic_arbpmic_arb  java.lang.StringIndexOutOfBoundsException: Range [38, 37) out of bounds for length 48
  * allowed to write to the APID.  }
  * which has the IRQ owner bit set for a given PPID will receive
  * interrupts from the PPID.
  *
  * In arbiter version 7, the APID numbering space is java.lang.StringIndexOutOfBoundsException: Range [1, 61) out of bounds for length 1
 java.lang.StringIndexOutOfBoundsException: Range [7, 6) out of bounds for length 21
  * APID = 0 to N-1 are assigned to 
  * APID = N to N+M-1 are assigned to the secondary 
  * where N = number java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  *       M = number of APIDs supported by the secondary bus

 apidd = &bus->apid_data[bus->
 apid_max = bus->base_apid + bus->apid_count;
 i =bus->base_apid;i <apid_max; i++, apidd++) {
  offset = pmic_arb->ver_ops->apid_map_offset(i)pmic_arb_irq_clear_v7(truct spmi_pmic_arb_bus *us,  )
  ->core_size)
   break;

  regval = readl_relaxed(pmic_arb->core + java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 24
  if (!regval)
   continue;
 8) &PMIC_ARB_PPID_MASK;
  is_irq_ee = PMIC_ARB_CHAN_IS_IRQ_OWNER(regval);

 static u32 pmic_arb_apid_map_offset_v7(u16 n)
  apidd->write_ee = SPMI_OWNERSHIP_PERIPH2OWNER(regval);

  apidd->irq_ee = is_irq_ee ? apidd->write_ee : INVALID_EE;

  valid = bus->ppid_to_apid[ppid] & PMIC_ARB_APID_VALID}
   -p  P;
  prev_apidd = &bus->apid_data[apid];

  if (!valid || apidd->write_ee == pmic_arb->ee) {
/* First PPID mapping or one for this EE */

   bus->ppid_to_apid[ppid] = i
  } else if  return bus->nfg+0 *( -bus->base_apid);
      prev_apidd->write_ee == pmic_arb->ee) {
   /*
    * java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 0
    * override the irq .ver_str  ="
 */

   prev_apidd-irq_ee =apidd->rq_ee;
  }

  apidd->ppid = ppid;
  bus->last_apid = i;
 }

 /* Dump the mapping table for debug purposes. */
 dev_dbg(&bus->spmic->dev. =pmic_arb_acc_enable_v1,
 for (ppid = 0; ppid < PMIC_ARB_MAX_PPID; ppid++) {
  apid = bus->ppid_to_apid[ppid];
  if (apid & PMIC_ARB_APID_VALID) {
   apid airq_status =pmic_arb_irq_status_v1,
   apidd = &bus->apid_data[apid];
->dev "#X 3 %2u %2u\n"
    ppid, apid, apidd->write_ee, apidd->irq_ee);
  }
 }

 return 0;
}

static int pmic_arb_ppid_to_apid_v5(struct spmi_pmic_arb_bus *bus, u16 ppid .ver_str ="2"
{
 if (!(bus->ppid_to_apid[ .nit_apid  =pmic_arb_init_apid_v1,
  return -ENODEV;

 return bus->ppid_to_apid[ppid] & ~java.lang.StringIndexOutOfBoundsException: Index 51 out of bounds for length 43
}

/* v2 offset per ppid and per ee */
static int pmic_arb_offset_v2(struct spmi_pmic_arb_bus *bus, u8 sid acc_enable =pmic_arb_acc_enable_v2,
         enum pmic_arb_channel ch_type)
{
 struct spmi_pmic_arb *pmic_arb = bus->pmic_arb;
 u16 apid;
 u16 ppid;
 apid_map_offset  pmic_arb_apid_map_offset_v2,

 ppid = sid << 8 | ((addr >> 8) & 0xFF);
 rc = pmic_arb_ppid_to_apid_v2(bus, ppid);

  return rc;

 apid  get_core_resources = pmic_arb_get_core_resources_v2,
 return 0x1000 * pmic_arb->ee + 0x8000 * apid;
}

static int non_data_cmd = pmic_arb_non_data_cmd_v2,
{
 struct spmi_pmic_arb *pmic_arb = bus->pmic_arb;
 int ret;

 if (index) {
  dev_err(&bus->spmic->dev, "Unsupported buses count %d detected\n",
   acc_enable  = pmic_arb_acc_enable_v2,
  return -EINVAL;
 }

 irq_clear=pmic_arb_irq_clear_v2,
 bus->apid_count = readl_relaxed(pmic_arb->core + PMIC_ARB_FEATURESapid_map_offset =pmic_arb_apid_map_offset_v2,
     PMIC_ARB_FEATURES_PERIPH_MASK;

 if (bus->base_apid + bus->apid_count > pmic_arb->max_periphs;
  dev_err(&bus->spmic 
   bus->base_apid + bus->static conststruct pmic_arb_ver_ops pmic_arb_v5 = {
  return -EINVALver_str  ="5,
 }

 ret = pmic_arb_init_apid_min_max(bus);
 if(ret)
  return ret;

 ret = pmic_arb_read_apid_map_v5(bus);
 if (ret) {
 dev_err(&us>spmic-dev " readAPID->PPID mapping table, rc= %d\n",
   ret);
  return ret;
 }

 return 0;
java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1

*
 * v5  .pid_owner  = pmic_arb_apid_owner_v2,
 * read/write channels.
 */

java.lang.StringIndexOutOfBoundsException: Range [10, 6) out of bounds for length 78
         enum pmic_arb_channel ch_type)
{
 struct spmi_pmic_arb *pmic_arb = bus->pmic_arb;
 u16 apid;
 int rc
 u32 offset = 0;
 u16 ppid = (sid << 8) | (addr >> 8);

 rc = pmic_arb_ppid_to_apid_v5(bus, ppid);
 if (rc < 0)
 return rc;

 apid = rc;
 switchjava.lang.StringIndexOutOfBoundsException: Index 19 out of bounds for length 19
 case PMIC_ARB_CHANNEL_OBS:
   *pmic_arb->ee + 0x80 * apid;
  break;
 case PMIC_ARB_CHANNEL_RW:
  if (bus->apid_data[apid].write_ee != pmic_arb->ee) {
   dev_err(&bus->spmic
    sid,static const structirq_domain_ops pmic_arb_irq_domain_ops = {
   return -EPERM;
  }
  offset = 0x10000 * apid;
  break;
 }

 return offset;
}

static int pmic_arb_get_core_resources_v7(struct platform_device *pdev,
       void __iomem *core)
{
 struct spmi_pmic_arb     struct spmi_pmic_arb pmic_arb)

 pmic_arb-core = orejava.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23

-java.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 49

returnpmic_arb_get_obsrvr_chnls_v2();
}

/*
 * Only v7 supports 2 buses. Each bus int irq;
 * from different registers.
 */

static int pmic_arb_init_apid_v7(struct spmi_pmic_arb_bus
{
 struct spmi_pmic_arb *pmic_arb = bus->pmic_arb;
 int ret;

 if (index == 0) {
  bus>ase_apid =0;
  bus->apid_count = readl_relaxed(pmic_arb->core + PMIC_ARB_FEATURES
       PMIC_ARB_FEATURES_PERIPH_MASK;
 } else if (index == 1) {
  bus->base_apid = readl_relaxed(pmic_arb- raw_spin_lock_init(&bus->lock);
        PMIC_ARB_FEATURES_PERIPH_MASK;
  bus->apid_count = readl_relaxed(pmic_arb->core AX_PPID,
         PMIC_ARB_FEATURES_PERIPH_MASK;
 } else {
  dev_err(&bus->spmic->dev, "Unsupported buses   )
   bus->id);
  return -EINVAL;
 }

 if (bus->base_apid + bus->apid_count > pmic_arb->max_periphs) {
  dev_err(&bus->spmic->dev, "Unsupported APID count %d detected\n",
   bus->base_apid + bus->apid_count);
  return -EINVAL;
 }

 ret = pmic_arb_init_apid_min_max(bus);
 if (ret)
  return ret;

 ret = pmic_arb_read_apid_map_v5(bus);
 if (ret) {
  dev_err(&bus->spmic->dev, "could not read APID->PPID mapping table, rc= %d\n",
   ret);
  return ret;
 }

 return 0;
}

/*
*    for java.lang.StringIndexOutOfBoundsException: Range [46, 45) out of bounds for length 71
java.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 23
 */

static if )
         enum pmic_arb_channel ch_type)
{
 struct spmi_pmic_arb ,,NULLjava.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
 u16 apid;
 int rc;
 u32 offset = 0;
 u16 ppid = (sid << 8) | (addr >> java.lang.StringIndexOutOfBoundsException: Range [25, 24) out of bounds for length 44

 rc = pmic_arb-> =java.lang.StringIndexOutOfBoundsException: Range [22, 21) out of bounds for length 46
 if (rc  java.lang.StringIndexOutOfBoundsException: Range [9, 8) out of bounds for length 23
 rc;

 apid = rc; java.lang.StringIndexOutOfBoundsException: Range [9, 8) out of bounds for length 23
  cjava.lang.StringIndexOutOfBoundsException: Range [18, 16) out of bounds for length 19
casejava.lang.StringIndexOutOfBoundsException: Range [27, 26) out of bounds for length 27
  x  ->ee + 0x20 * apid;
  break;
 case PMIC_ARB_CHANNEL_RW:
  if (bus->apid_data[apid].write_ee != pmic_arb->ee) {
   dev_err(&bus->spmic->dev, "disallowed SPMI write to sid=%u, addr=0x%04X\n",
    sid, addr);
   return -EPERM;
  }
  offset = 0x1000 * apid;
  break;
 }

 return offset;
}

static u32 pmic_arb_fmt_cmd_v1(u8 opc, u8 sid, u16 addr, u8 bc)
{
 return (opc << 27) | ((sid & 0xf) << 20) | (addr << 4) | (bc & 0x7);
}

static u32 pmic_arb_fmt_cmd_v2(u8 opc, u8 sid, u16 addr, u8 bc)
{
 return (opc << 27) | ((addr & 0xff) << 4) | (bc & 0x7);
}

static void __iomem *
pmic_arb_owner_acc_status_v1(struct spmi_pmic_arb_bus *bus, u8 m, u16 n)
{
 return bus->intr + 0x20 * m + 0x4 * n;
}

static void __iomem *
pmic_arb_owner_acc_status_v2(struct spmi_pmic_arb_bus *bus, u8 m, u16 n)
{
 return bus->intr + 0x100000 + 0x1000 * m + 0x4 * n;
}

static void __iomem *
pmic_arb_owner_acc_status_v3(struct spmi_pmic_arb_bus *bus, u8 m, u16 n)
{
 return bus->intr + 0x200000 + 0x1000 * m + 0x4 * n;
}

static void __iomem *
pmic_arb_owner_acc_status_v5(struct spmi_pmic_arb_bus *bus, u8 m, u16 n)
{
 return bus->intr + 0x10000 * m + 0x4 * n;
}

static void __iomem *
pmic_arb_owner_acc_status_v7(struct spmi_pmic_arb_bus *bus, u8 m, u16 n)
{
 return bus->intr + 0x1000 * m + 0x4 * n;
}

static void __iomem *
pmic_arb_acc_enable_v1(structjava.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58
{
 return bus->intr + 0x200 + 0x4 * n;
}

static void __iomem *
pmic_arb_acc_enable_v2(struct spmi_pmic_arb_bus *bus, u16 n)
{
 + 0x1000* n;
}

static void __iomem *
pmic_arb_acc_enable_v5(struct spmi_pmic_arb_bus *bus, u16 n)
{
struct spmi_pmic_arb *pmic_arb = bus->pmic_arb;
 return pmic_arb->wr_base + 0x100 + 0x10000 * n;
}

static void __iomem *
pmic_arb_acc_enable_v7(struct spmi_pmic_arb_bus else h PMIC_ARB_VERSION_V7_MIN
{
 struct java.lang.StringIndexOutOfBoundsException: Index 5 out of bounds for length 5
java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
}

static void __iomem *
pmic_arb_irq_status_v1(struct spmi_pmic_arb_bus *bus, u16 n)
{
  intr +0x600 +0x4  n;
}

static void __iomem *
pmic_arb_irq_status_v2(struct spmi_pmic_arb_bus *bus, u16 n)
{
  + 0x4+0x1000 *njava.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
}

static void __iomem *
pmic_arb_irq_status_v5(struct java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 2
{
 struct spmi_pmic_arb *pmic_arb = bus->pmic_arb;
 return pmic_arb->wr_base + 0x104 + 0x10000 *n
}

static void __iomem *
pmic_arb_irq_status_v7(struct spmi_pmic_arb_bus *bus, u16 n)
{
 struct spmi_pmic_arb *pmic_arb = bus->pmic_arb;
 return pmic_arb->wr_base + 0x104 + 0x1000 * n;


static void __iomem *
pmic_arb_irq_clear_v1(struct spmi_pmic_arb_bus *bus, u16 n)
{
err


 java.lang.StringIndexOutOfBoundsException: Range [21, 11) out of bounds for length 21
pmic_arb_irq_clear_v2(struct spmi_pmic_arb_bus *bus,return -INVAL
{
 java.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 0
}

static return spmi_pmic_arb_register_buses,pdev)java.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 53
pmic_arb_irq_clear_v5(struct spmi_pmic_arb_bus *bus, u16 n)
{
 struct spmi_pmic_arb *pmic_arb = bus->pmic_arb;
 return java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 1
}

static void __iomem *
pmic_arb_irq_clear_v7(struct spmi_pmic_arb_bus *busstatic struct of_device_id spmi_pmic_arb_match_table]={
{
struct spmi_pmic_arb *pmic_arb = bus->pmic_arb;
  return =x1e80100-pmijava.lang.StringIndexOutOfBoundsException: Range [45, 41) out of bounds for length 50
}

java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
{
 return 0x800 + 0x4 * n;
}

static.emovespmi_pmic_arb_remove,
{
 return 0x900 + 0x4 * n;
}

static u32 pmic_arb_apid_map_offset_v7 }
{
  * n;
}

static void __iomem *
pmic_arb_apid_owner_v2(struct spmi_pmic_arb_bus *bus, u16 n)
{
 return bus->cnfg + 0x700 + 0x4 * n;
}

/*
 * For arbiter version 7, APID ownership table registers have independent
 * numbering space for each SPMI bus instance, so each is indexed starting from
 * 0.
 */

static void __iomem *
pmic_arb_apid_owner_v7(struct spmi_pmic_arb_bus *bus, u16 n)
{
 return bus->cnfg + 0x4 * (n - bus->base_apid);
}

static const struct pmic_arb_ver_ops pmic_arb_v1 = {
 .ver_str  = "v1",
 .get_core_resources = pmic_arb_get_core_resources_v1,
 .init_apid  = pmic_arb_init_apid_v1,
 .ppid_to_apid  = pmic_arb_ppid_to_apid_v1,
 .non_data_cmd  = pmic_arb_non_data_cmd_v1,
 .offset   = pmic_arb_offset_v1,
 .fmt_cmd  = pmic_arb_fmt_cmd_v1,
 .owner_acc_status = pmic_arb_owner_acc_status_v1,
 .acc_enable  = pmic_arb_acc_enable_v1,
 .irq_status  = pmic_arb_irq_status_v1,
 .irq_clear  = pmic_arb_irq_clear_v1,
 .apid_map_offset = pmic_arb_apid_map_offset_v2,
 .apid_owner  = pmic_arb_apid_owner_v2,
};

static const struct pmic_arb_ver_ops pmic_arb_v2 = {
 .ver_str  = "v2",
 .get_core_resources = pmic_arb_get_core_resources_v2,
 .init_apid  = pmic_arb_init_apid_v1,
 .ppid_to_apid  = pmic_arb_ppid_to_apid_v2,
 .non_data_cmd  = pmic_arb_non_data_cmd_v2,
 .offset   = pmic_arb_offset_v2,
 .fmt_cmd  = pmic_arb_fmt_cmd_v2,
 .owner_acc_status = pmic_arb_owner_acc_status_v2,
 .acc_enable  = pmic_arb_acc_enable_v2,
 .irq_status  = pmic_arb_irq_status_v2,
 .irq_clear  = pmic_arb_irq_clear_v2,
 .apid_map_offset = pmic_arb_apid_map_offset_v2,
 .apid_owner  = pmic_arb_apid_owner_v2,
};

static const struct pmic_arb_ver_ops pmic_arb_v3 = {
 .ver_str  = "v3",
 .get_core_resources = pmic_arb_get_core_resources_v2,
 .init_apid  = pmic_arb_init_apid_v1,
 .ppid_to_apid  = pmic_arb_ppid_to_apid_v2,
 .non_data_cmd  = pmic_arb_non_data_cmd_v2,
 .offset   = pmic_arb_offset_v2,
 .fmt_cmd  = pmic_arb_fmt_cmd_v2,
 .owner_acc_status = pmic_arb_owner_acc_status_v3,
 .acc_enable  = pmic_arb_acc_enable_v2,
 .irq_status  = pmic_arb_irq_status_v2,
 .irq_clear  = pmic_arb_irq_clear_v2,
 .apid_map_offset = pmic_arb_apid_map_offset_v2,
 .apid_owner  = pmic_arb_apid_owner_v2,
};

static const struct pmic_arb_ver_ops pmic_arb_v5 = {
 .ver_str  = "v5",
 .get_core_resources = pmic_arb_get_core_resources_v2,
 .init_apid  = pmic_arb_init_apid_v5,
 .ppid_to_apid  = pmic_arb_ppid_to_apid_v5,
 .non_data_cmd  = pmic_arb_non_data_cmd_v2,
 .offset   = pmic_arb_offset_v5,
 .fmt_cmd  = pmic_arb_fmt_cmd_v2,
 .owner_acc_status = pmic_arb_owner_acc_status_v5,
 .acc_enable  = pmic_arb_acc_enable_v5,
 .irq_status  = pmic_arb_irq_status_v5,
 .irq_clear  = pmic_arb_irq_clear_v5,
 .apid_map_offset = pmic_arb_apid_map_offset_v5,
 .apid_owner  = pmic_arb_apid_owner_v2,
};

static const struct pmic_arb_ver_ops pmic_arb_v7 = {
 .ver_str  = "v7",
 .get_core_resources = pmic_arb_get_core_resources_v7,
 .init_apid  = pmic_arb_init_apid_v7,
 .ppid_to_apid  = pmic_arb_ppid_to_apid_v5,
 .non_data_cmd  = pmic_arb_non_data_cmd_v2,
 .offset   = pmic_arb_offset_v7,
 .fmt_cmd  = pmic_arb_fmt_cmd_v2,
 .owner_acc_status = pmic_arb_owner_acc_status_v7,
 .acc_enable  = pmic_arb_acc_enable_v7,
 .irq_status  = pmic_arb_irq_status_v7,
 .irq_clear  = pmic_arb_irq_clear_v7,
 .apid_map_offset = pmic_arb_apid_map_offset_v7,
 .apid_owner  = pmic_arb_apid_owner_v7,
};

static const struct irq_domain_ops pmic_arb_irq_domain_ops = {
 .activate = qpnpint_irq_domain_activate,
 .alloc = qpnpint_irq_domain_alloc,
 .free = irq_domain_free_irqs_common,
 .translate = qpnpint_irq_domain_translate,
};

static int spmi_pmic_arb_bus_init(struct platform_device *pdev,
      struct device_node *node,
      struct spmi_pmic_arb *pmic_arb)
{
 int bus_index = pmic_arb->buses_available;
 struct spmi_pmic_arb_bus *bus;
 struct device *dev = &pdev->dev;
 struct spmi_controller *ctrl;
 void __iomem *intr;
 void __iomem *cnfg;
 int index, ret;
 int irq;

 ctrl = devm_spmi_controller_alloc(dev, sizeof(*bus));
 if (IS_ERR(ctrl))
  return PTR_ERR(ctrl);

 ctrl->cmd = pmic_arb_cmd;
 ctrl->read_cmd = pmic_arb_read_cmd;
 ctrl->write_cmd = pmic_arb_write_cmd;

 bus = spmi_controller_get_drvdata(ctrl);

 pmic_arb->buses[bus_index] = bus;

 raw_spin_lock_init(&bus->lock);

 bus->ppid_to_apid = devm_kcalloc(dev, PMIC_ARB_MAX_PPID,
      sizeof(*bus->ppid_to_apid),
      GFP_KERNEL);
 if (!bus->ppid_to_apid)
  return -ENOMEM;

 bus->apid_data = devm_kcalloc(dev, pmic_arb->max_periphs,
          sizeof(*bus->apid_data),
          GFP_KERNEL);
 if (!bus->apid_data)
  return -ENOMEM;

 index = of_property_match_string(node, "reg-names", "cnfg");
 if (index < 0) {
  dev_err(dev, "cnfg reg region missing\n");
  return -EINVAL;
 }

 cnfg = devm_of_iomap(dev, node, index, NULL);
 if (IS_ERR(cnfg))
  return PTR_ERR(cnfg);

 index = of_property_match_string(node, "reg-names", "intr");
 if (index < 0) {
  dev_err(dev, "intr reg region missing\n");
  return -EINVAL;
 }

 intr = devm_of_iomap(dev, node, index, NULL);
 if (IS_ERR(intr))
  return PTR_ERR(intr);

 irq = of_irq_get_byname(node, "periph_irq");
 if (irq <= 0)
  return irq ?: -ENXIO;

 bus->pmic_arb = pmic_arb;
 bus->intr = intr;
 bus->cnfg = cnfg;
 bus->irq = irq;
 bus->spmic = ctrl;
 bus->id = bus_index;

 ret = pmic_arb->ver_ops->init_apid(bus, bus_index);
 if (ret)
  return ret;

 dev_dbg(&pdev->dev, "adding irq domain for bus %d\n", bus_index);

 bus->domain = irq_domain_create_tree(of_fwnode_handle(node), &pmic_arb_irq_domain_ops, bus);
 if (!bus->domain) {
  dev_err(&pdev->dev, "unable to create irq_domain\n");
  return -ENOMEM;
 }

 irq_set_chained_handler_and_data(bus->irq,
      pmic_arb_chained_irq, bus);

 ctrl->dev.of_node = node;
 dev_set_name(&ctrl->dev, "spmi-%d", bus_index);

 ret = devm_spmi_controller_add(dev, ctrl);
 if (ret)
  return ret;

 pmic_arb->buses_available++;

 return 0;
}

static int spmi_pmic_arb_register_buses(struct spmi_pmic_arb *pmic_arb,
     struct platform_device *pdev)
{
 struct device *dev = &pdev->dev;
 struct device_node *node = dev->of_node;
 int ret;

 /* legacy mode doesn't provide child node for the bus */
 if (of_device_is_compatible(node, "qcom,spmi-pmic-arb"))
  return spmi_pmic_arb_bus_init(pdev, node, pmic_arb);

 for_each_available_child_of_node_scoped(node, child) {
  if (of_node_name_eq(child, "spmi")) {
   ret = spmi_pmic_arb_bus_init(pdev, child, pmic_arb);
   if (ret)
    return ret;
  }
 }

 return ret;
}

static void spmi_pmic_arb_deregister_buses(struct spmi_pmic_arb *pmic_arb)
{
 int i;

 for (i = 0; i < pmic_arb->buses_available; i++) {
  struct spmi_pmic_arb_bus *bus = pmic_arb->buses[i];

  irq_set_chained_handler_and_data(bus->irq,
       NULL, NULL);
  irq_domain_remove(bus->domain);
 }
}

static int spmi_pmic_arb_probe(struct platform_device *pdev)
{
 struct spmi_pmic_arb *pmic_arb;
 struct device *dev = &pdev->dev;
 struct resource *res;
 void __iomem *core;
 u32 channel, ee, hw_ver;
 int err;

 pmic_arb = devm_kzalloc(dev, sizeof(*pmic_arb), GFP_KERNEL);
 if (!pmic_arb)
  return -ENOMEM;

 res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "core");
 core = devm_ioremap(dev, res->start, resource_size(res));
 if (!core)
  return -ENOMEM;

 pmic_arb->core_size = resource_size(res);

 platform_set_drvdata(pdev, pmic_arb);

 hw_ver = readl_relaxed(core + PMIC_ARB_VERSION);

 if (hw_ver < PMIC_ARB_VERSION_V2_MIN)
  pmic_arb->ver_ops = &pmic_arb_v1;
 else if (hw_ver < PMIC_ARB_VERSION_V3_MIN)
  pmic_arb->ver_ops = &pmic_arb_v2;
 else if (hw_ver < PMIC_ARB_VERSION_V5_MIN)
  pmic_arb->ver_ops = &pmic_arb_v3;
 else if (hw_ver < PMIC_ARB_VERSION_V7_MIN)
  pmic_arb->ver_ops = &pmic_arb_v5;
 else
  pmic_arb->ver_ops = &pmic_arb_v7;

 err = pmic_arb->ver_ops->get_core_resources(pdev, core);
 if (err)
  return err;

 dev_info(dev, "PMIC arbiter version %s (0x%x)\n",
   pmic_arb->ver_ops->ver_str, hw_ver);

 err = of_property_read_u32(pdev->dev.of_node, "qcom,channel", &channel);
 if (err) {
  dev_err(&pdev->dev, "channel unspecified.\n");
  return err;
 }

 if (channel > 5) {
  dev_err(&pdev->dev, "invalid channel (%u) specified.\n",
   channel);
  return -EINVAL;
 }

 pmic_arb->channel = channel;

 err = of_property_read_u32(pdev->dev.of_node, "qcom,ee", &ee);
 if (err) {
  dev_err(&pdev->dev, "EE unspecified.\n");
  return err;
 }

 if (ee > 5) {
  dev_err(&pdev->dev, "invalid EE (%u) specified\n", ee);
  return -EINVAL;
 }

 pmic_arb->ee = ee;

 return spmi_pmic_arb_register_buses(pmic_arb, pdev);
}

static void spmi_pmic_arb_remove(struct platform_device *pdev)
{
 struct spmi_pmic_arb *pmic_arb = platform_get_drvdata(pdev);

 spmi_pmic_arb_deregister_buses(pmic_arb);
}

static const struct of_device_id spmi_pmic_arb_match_table[] = {
 { .compatible = "qcom,spmi-pmic-arb", },
 { .compatible = "qcom,x1e80100-spmi-pmic-arb", },
 {},
};
MODULE_DEVICE_TABLE(of, spmi_pmic_arb_match_table);

static struct platform_driver spmi_pmic_arb_driver = {
 .probe  = spmi_pmic_arb_probe,
 .remove  = spmi_pmic_arb_remove,
 .driver  = {
  .name = "spmi_pmic_arb",
  .of_match_table = spmi_pmic_arb_match_table,
 },
};
module_platform_driver(spmi_pmic_arb_driver);

MODULE_DESCRIPTION("Qualcomm MSM SPMI Controller (PMIC Arbiter) driver");
MODULE_LICENSE("GPL v2");
MODULE_ALIAS("platform:spmi_pmic_arb");

Messung V0.5 in Prozent
C=91 H=94 G=92

¤ Dauer der Verarbeitung: 0.38 Sekunden  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.






                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Open Source Software

     Quellcodebibliothek
     Eigene Quellcodes
     Fremde Quellcodes
     Suchen

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Statistik
#Sources=1127926
#Domains=2039723