linux/drivers/mfd/ucb1x00-core.c
<<
>>
Prefs
   1/*
   2 *  linux/drivers/mfd/ucb1x00-core.c
   3 *
   4 *  Copyright (C) 2001 Russell King, All Rights Reserved.
   5 *
   6 * This program is free software; you can redistribute it and/or modify
   7 * it under the terms of the GNU General Public License as published by
   8 * the Free Software Foundation; either version 2 of the License.
   9 *
  10 *  The UCB1x00 core driver provides basic services for handling IO,
  11 *  the ADC, interrupts, and accessing registers.  It is designed
  12 *  such that everything goes through this layer, thereby providing
  13 *  a consistent locking methodology, as well as allowing the drivers
  14 *  to be used on other non-MCP-enabled hardware platforms.
  15 *
  16 *  Note that all locks are private to this file.  Nothing else may
  17 *  touch them.
  18 */
  19#include <linux/module.h>
  20#include <linux/kernel.h>
  21#include <linux/sched.h>
  22#include <linux/slab.h>
  23#include <linux/init.h>
  24#include <linux/errno.h>
  25#include <linux/interrupt.h>
  26#include <linux/irq.h>
  27#include <linux/device.h>
  28#include <linux/mutex.h>
  29#include <linux/mfd/ucb1x00.h>
  30#include <linux/pm.h>
  31#include <linux/gpio.h>
  32
  33static DEFINE_MUTEX(ucb1x00_mutex);
  34static LIST_HEAD(ucb1x00_drivers);
  35static LIST_HEAD(ucb1x00_devices);
  36
  37/**
  38 *      ucb1x00_io_set_dir - set IO direction
  39 *      @ucb: UCB1x00 structure describing chip
  40 *      @in:  bitfield of IO pins to be set as inputs
  41 *      @out: bitfield of IO pins to be set as outputs
  42 *
  43 *      Set the IO direction of the ten general purpose IO pins on
  44 *      the UCB1x00 chip.  The @in bitfield has priority over the
  45 *      @out bitfield, in that if you specify a pin as both input
  46 *      and output, it will end up as an input.
  47 *
  48 *      ucb1x00_enable must have been called to enable the comms
  49 *      before using this function.
  50 *
  51 *      This function takes a spinlock, disabling interrupts.
  52 */
  53void ucb1x00_io_set_dir(struct ucb1x00 *ucb, unsigned int in, unsigned int out)
  54{
  55        unsigned long flags;
  56
  57        spin_lock_irqsave(&ucb->io_lock, flags);
  58        ucb->io_dir |= out;
  59        ucb->io_dir &= ~in;
  60
  61        ucb1x00_reg_write(ucb, UCB_IO_DIR, ucb->io_dir);
  62        spin_unlock_irqrestore(&ucb->io_lock, flags);
  63}
  64
  65/**
  66 *      ucb1x00_io_write - set or clear IO outputs
  67 *      @ucb:   UCB1x00 structure describing chip
  68 *      @set:   bitfield of IO pins to set to logic '1'
  69 *      @clear: bitfield of IO pins to set to logic '0'
  70 *
  71 *      Set the IO output state of the specified IO pins.  The value
  72 *      is retained if the pins are subsequently configured as inputs.
  73 *      The @clear bitfield has priority over the @set bitfield -
  74 *      outputs will be cleared.
  75 *
  76 *      ucb1x00_enable must have been called to enable the comms
  77 *      before using this function.
  78 *
  79 *      This function takes a spinlock, disabling interrupts.
  80 */
  81void ucb1x00_io_write(struct ucb1x00 *ucb, unsigned int set, unsigned int clear)
  82{
  83        unsigned long flags;
  84
  85        spin_lock_irqsave(&ucb->io_lock, flags);
  86        ucb->io_out |= set;
  87        ucb->io_out &= ~clear;
  88
  89        ucb1x00_reg_write(ucb, UCB_IO_DATA, ucb->io_out);
  90        spin_unlock_irqrestore(&ucb->io_lock, flags);
  91}
  92
  93/**
  94 *      ucb1x00_io_read - read the current state of the IO pins
  95 *      @ucb: UCB1x00 structure describing chip
  96 *
  97 *      Return a bitfield describing the logic state of the ten
  98 *      general purpose IO pins.
  99 *
 100 *      ucb1x00_enable must have been called to enable the comms
 101 *      before using this function.
 102 *
 103 *      This function does not take any mutexes or spinlocks.
 104 */
 105unsigned int ucb1x00_io_read(struct ucb1x00 *ucb)
 106{
 107        return ucb1x00_reg_read(ucb, UCB_IO_DATA);
 108}
 109
 110static void ucb1x00_gpio_set(struct gpio_chip *chip, unsigned offset, int value)
 111{
 112        struct ucb1x00 *ucb = container_of(chip, struct ucb1x00, gpio);
 113        unsigned long flags;
 114
 115        spin_lock_irqsave(&ucb->io_lock, flags);
 116        if (value)
 117                ucb->io_out |= 1 << offset;
 118        else
 119                ucb->io_out &= ~(1 << offset);
 120
 121        ucb1x00_enable(ucb);
 122        ucb1x00_reg_write(ucb, UCB_IO_DATA, ucb->io_out);
 123        ucb1x00_disable(ucb);
 124        spin_unlock_irqrestore(&ucb->io_lock, flags);
 125}
 126
 127static int ucb1x00_gpio_get(struct gpio_chip *chip, unsigned offset)
 128{
 129        struct ucb1x00 *ucb = container_of(chip, struct ucb1x00, gpio);
 130        unsigned val;
 131
 132        ucb1x00_enable(ucb);
 133        val = ucb1x00_reg_read(ucb, UCB_IO_DATA);
 134        ucb1x00_disable(ucb);
 135
 136        return val & (1 << offset);
 137}
 138
 139static int ucb1x00_gpio_direction_input(struct gpio_chip *chip, unsigned offset)
 140{
 141        struct ucb1x00 *ucb = container_of(chip, struct ucb1x00, gpio);
 142        unsigned long flags;
 143
 144        spin_lock_irqsave(&ucb->io_lock, flags);
 145        ucb->io_dir &= ~(1 << offset);
 146        ucb1x00_enable(ucb);
 147        ucb1x00_reg_write(ucb, UCB_IO_DIR, ucb->io_dir);
 148        ucb1x00_disable(ucb);
 149        spin_unlock_irqrestore(&ucb->io_lock, flags);
 150
 151        return 0;
 152}
 153
 154static int ucb1x00_gpio_direction_output(struct gpio_chip *chip, unsigned offset
 155                , int value)
 156{
 157        struct ucb1x00 *ucb = container_of(chip, struct ucb1x00, gpio);
 158        unsigned long flags;
 159        unsigned old, mask = 1 << offset;
 160
 161        spin_lock_irqsave(&ucb->io_lock, flags);
 162        old = ucb->io_out;
 163        if (value)
 164                ucb->io_out |= mask;
 165        else
 166                ucb->io_out &= ~mask;
 167
 168        ucb1x00_enable(ucb);
 169        if (old != ucb->io_out)
 170                ucb1x00_reg_write(ucb, UCB_IO_DATA, ucb->io_out);
 171
 172        if (!(ucb->io_dir & mask)) {
 173                ucb->io_dir |= mask;
 174                ucb1x00_reg_write(ucb, UCB_IO_DIR, ucb->io_dir);
 175        }
 176        ucb1x00_disable(ucb);
 177        spin_unlock_irqrestore(&ucb->io_lock, flags);
 178
 179        return 0;
 180}
 181
 182static int ucb1x00_to_irq(struct gpio_chip *chip, unsigned offset)
 183{
 184        struct ucb1x00 *ucb = container_of(chip, struct ucb1x00, gpio);
 185
 186        return ucb->irq_base > 0 ? ucb->irq_base + offset : -ENXIO;
 187}
 188
 189/*
 190 * UCB1300 data sheet says we must:
 191 *  1. enable ADC       => 5us (including reference startup time)
 192 *  2. select input     => 51*tsibclk  => 4.3us
 193 *  3. start conversion => 102*tsibclk => 8.5us
 194 * (tsibclk = 1/11981000)
 195 * Period between SIB 128-bit frames = 10.7us
 196 */
 197
 198/**
 199 *      ucb1x00_adc_enable - enable the ADC converter
 200 *      @ucb: UCB1x00 structure describing chip
 201 *
 202 *      Enable the ucb1x00 and ADC converter on the UCB1x00 for use.
 203 *      Any code wishing to use the ADC converter must call this
 204 *      function prior to using it.
 205 *
 206 *      This function takes the ADC mutex to prevent two or more
 207 *      concurrent uses, and therefore may sleep.  As a result, it
 208 *      can only be called from process context, not interrupt
 209 *      context.
 210 *
 211 *      You should release the ADC as soon as possible using
 212 *      ucb1x00_adc_disable.
 213 */
 214void ucb1x00_adc_enable(struct ucb1x00 *ucb)
 215{
 216        mutex_lock(&ucb->adc_mutex);
 217
 218        ucb->adc_cr |= UCB_ADC_ENA;
 219
 220        ucb1x00_enable(ucb);
 221        ucb1x00_reg_write(ucb, UCB_ADC_CR, ucb->adc_cr);
adc_rivers/mfd/ucb1x0ucb1x00-core.c#L131" id="L131" class="7   u132  ucb1x00" class="sref">ucb1x00 *<822821ef="drivers/mfd/ucne" name="L221"re.c#L105" id="L10re."srefc#L193" id="L193" class="line" name"L102" class="line" name="sref">mask;
mask;
 2adc_enable 122
22an class="comment"> *      This funB1x00 structure describing chip
 122s22an class="comment"> *      @ucb:   Ua>);
hannel:.erterhannel ;
 122{22an class="comment"> *      @set:   biync: was = ocksyncron/spor to uln>
 122 22an class="comment"> *
 132 23an class="comment"> *      @ucb: UCSversi="certer mustt; 10eforwas = ockent it 132
23an class="comment"> *      You shousynchron/sedcerter mustt; 1s (via as soonSYNCspan)ll thiwas  132 23an class="comment"> *      ucb1x00_antil
 132 23an class="comment"> */ 132 23an class="comment"> *      functionction takes thuses, alyks. 132
23ers/m  name="sref">mask;
 2>mapletC (2= 10.7usmax witleatusync)
 132 23an class="comment"> *
 132}23an class="comment"> *      @ucb:   Iffrom procockausynchron/sedcerter mustt; 1an>
ep.  As a  132
23an class="comment"> *      @set:   witl mutex to prevehel>
 132s23an class="comment"> *

 142{2ucb1x00_adc_enableucb1x00 *ucb)
);
hannel"sref">adc_cr);
hannelL1re href="+code=value" csync"sref">spin_unloync href="drivers/mfd/ucb1x00-core.c#L215" id="L141" cla2s="line" name="L141"> 142 24a href="drivers/mfd/ucb1x00-core.c#L112" id=2L142" cla2s="line" name="L142"> 142 2      unsigned long spin_unl
 142
2a href="drivers/mfd/ucb1x00-core.c#L144" id=2L144" cla2s="line" name="L144"> 142 2      spin_unloync href="drivers/mfd/ucb1x00-core.c#L215" id="Lline" nams="line" name="L145"> 142 24             , int );
hannel"sref">adc_cr);
hannelL1reref="+code=UCB_ADC_ENA" claSYNCass="sref">UCB_ADC_ENA;SYNCass= href="drivers/mfd/ucb1x00-core.c#L131" id=2L216" class="line" name="L146"> 142 24 href="drivers/mfd/ucb1x00-core.c#L127" id=2L147" cla2s="line" name="L147"> 142 2      ucb1x00_reg_write(ucb, UCB_ADC_CR, ucb->adc_cr);
);
hannel"sref">adc_cr);
hannelL1reef="drivers/mfd/ucb1x00-core.c#L222" id="L148" cla2s="line" name="L148"> 142 2      ucb1x00_reg_write(ucb, UCB_ADC_CR, ucb->adc_cr);
);
hannel"sref">adc_cr);
hannelL1rere="+code=UCB_ADC_ENA" claSTART"sref">UCB_ADC_ENA;STARTL1reef="drivers/mfd/ucb1x00-core.c#L222" id="L129" cla2s="line" name="L149"> 142 24 href="drivers/mfd/ucb1x00-core.c#L220" id="L150" cla2s="line" name="L150"> 152
25      152 2      return 0val = ucb1x00_reg_read(ucb, ;ass="sref">UCB_IO_DATA;ass=L1reef="drivers/mfd/ucb1x00-core.c#L222" id="L152" cla2s="line" name="L152"> 152}252    return 0val = ;ass_VAL"sref">UCB_IO_DATA;ass_VAL href="drivers/mfd/ucb1x00-core.c#L215" id="L153" cla2s="line" name="L153"> 152
25              152s25              152 2              , int spin_unloet_uses, a_ the href="+code=ucb" claTASK_INTERRUPTIBLE"sref">spin_unlTASK_INTERRUPTIBLEL1reef="drivers/mfd/ucb1x00-core.c#L222" id="L216" class="line" name="L156"> 152{25             ss="sref">io_outss=href=1ef="drivers/mfd/ucb1x00-core.c#L222" id="L147" cla2s="line" name="L157"> 152 2      struct adc_rivers/mfd/ucbL158" cla2s="line" name="L158"> 152 25 href="drivers/mfd/ucb1x00-core.c#L189" id=2L159" cla2s="line" name="L159"> 152 25     return 0;
;ass"sref">UCB_IO_DATA;asshref="+code=ucb" clalas"sref">val =  162
26a href="drivers/mfd/ucb1x00-core.c#L181" id=2L161" cla2s="line" name="L161"> 162 26 href="drivers/mfd/ucb1x00-core.c#L182" id=2L162" cla2s="line" name="L162"> 162 26an class="comment"> *      fc#L193" id="L193" class="line" name"L102" class=L163" cla2s="line" name="L163"> 162 26an class="comment"> *      Any codeadc_disable. -  converter
 162 26an class="comment"> *      functionB1x00 structure describing chip
 162 26an class="comment"> *
 162 26an class="comment"> *      This funD/span> converter
reforthe ADC as soon  prev
 162
26an class="comment"> *      @u
 162 2      href="+code=ucb1x00_adc_enable"  class="sref">ucb1x00_disableucb1x00 *ucb)
 162 2      f="drivers/mfd/ucb1x00-core.c#L173" id=2L170" cla2s="line" name="L170"> 172 27     ucb->adc_cr);
UCB_ADC_ENA;
 172
27     ucb1x00_reg_write(ucb, UCB_ADC_CR, ucb->adc_cr);
 172 2      if (!(ucb1x00_disable(ucb);
 172 27 href="drivers/mfd/ucb1x00-core.c#L144" id=2L174" cla2s="line" name="L174"> 172 2              "+code=mutex_lock" clrqrest"sref">mutex_lockrqrestp;ucb->adc_mutex);
 172 27a href="drivers/mfd/ucb1x00-core.c#L126" id=2L176" cla2s="line" name="L176"> 172 27 href="drivers/mfd/ucb1x00-core.c#L127" id=2L177" cla2s="line" name="L177"> 172 27an class="comment"> *      >
 172
27an class="comment"> *      @sestructurI
 hefome=g
 172 27an class="comment"> *
 182}28an class="comment"> *      @ucT00 for use. be purpostept
s wheB1x00 SIBCLK0ionstoppn>
 182
28an class="comment"> *      YouSitup we neable t curr="ctt c-a>( 182s28an class="comment"> *      ucbSIBCLK0e ttalk0e ttnt rn>
.  We e Avmms 182{28an class="comment"> *      Any context
s cess tnt rn>
.hr href="drivers/mfd/ucb1x00-core.c#L75" id="2L174" cla2s="line" name="L184"> 182 28an class="comment"> */
 182
2a hrefoid ucb1x00_to_irqucb1x00_struct  ng c"sref">ucb1x00_str>ng c href="+code=ucb" clang c"sref">ucb1x00_ng c href="drivers/mfd/ucb1x00-core.c#L215" id="L186" cla2s="line" name="L186"> 182 28a href="drivers/mfd/ucb1x00-core.c#L157" id=2L187" cla2s="line" name="L187"> 182}28     struct ucb1x00 *ucb = ucb1x00_str>ng c(str_hefomer_et shref="+code=ucb" clang c"sref">ucb1x00_ng c hreff="drivers/mfd/ucb1x00-core.c#L217" id="L188" cla2s="line" name="L188"> 182
28     unsigned long io_dirio_dir 182<28 href="drivers/mfd/ucb1x00-core.c#L220" id="L190" cla2s="line" name="L190"> 192<29     ucb1x00_enable(ucb);
 192<29     io_dirucb1x00_reg_read(ucb, UCB_ADC_CR 192<29     ucb1x00_reg_write(ucb, UCB_IO_DIRio_dir 192<29     ucb1x00_reg_write(ucb, UCB_IO_DIR 192<29 href="drivers/mfd/ucb1x00-core.c#L115" id=2L195" cla2s="line" name="L195"> 192<29             cock("+code=ucb" clai"sref">io_dirio_dirio_dirio_dirio_dirucb1x00_struct ++f="drivers/mfd/ucb1x00-core.c#L215" id="L196" cla2s="line" name="L196"> 192<29             io_dir 192
297            ucb1x00_purpoic_hefometss=href="+code=ucb" class="sref">ucb, irq_base + io_dir 192<29     ucb1x00_disable(ucb);
 192<2pan clf="drivers/mfd/ucb1x00-core.c#L126" id=3L200" cla3s="line" name="L200"> 203<30 href="drivers/mfd/ucb1x00-core.c#L161" id=3L201" cla3s="line" name="L201"> 203<3pan cloid spin_unlgpio_setss=_updhe uct ucb1x00 *ucb)
mask)) {
 193<3pan clf="drivers/mfd/ucb1x00-core.c#L157" id=3L203" cla3s="line" name="L203"> 203<30     ucb1x00_enable(ucb);
 203<30     ucb, bs"sref">val " clris/a>bsa hre href="+code=mask" class="sref">mask)) {
 193<30             , int ucb1x00_reg_write(ucb, UCB_ADC_CRucb->bs"sref">val " clris/a>bsa hre href="drivers/mfd/ucb1x00-core.c#L161" id=3L604" cla3s="line" name="L196"> 193<30             ucb->mask" class=a href="drivers/mfd/ucb1x00-core.c#L221" id=3L704" cla3s="line" name="L197"> 193<307    ucb, bs"sref">val " clfal/a>bsa hre href="+code=mask" class="sref">mask)) {
 193<308            , int ucb1x00_reg_write(ucb, UCB_IO_DATA< E_FAL href="+code=ucb" class="sref">ucb->bs"sref">val " clfal/a>bsa hre href="drivers/mfd/ucb1x00-core.c#L161" id=3L904" cla3s="line" name="L199"> 193<309            ucb->mask" class=a href="drivers/mfd/ucb1x00-core.c#L221" id=3L210" cla3s="line" name="L210"> 213<31     ucb1x00_disable(ucb);
 213<3pan clf="drivers/mfd/ucb1x00-core.c#L126" id=3L212" cla3s="line" name="L212"> 213<3pan cl="drivers/mfd/ucb1x00-core.c#L126" id=3L203" cla3s="line" name="L213"> 213<3pan cloid chipgpio_setss=_noo=uct nt s"sref">ucb1x00_str>nt shreff="+code=ucb" clant s"sref">ucb1x00_nt shrefh="drivers/mfd/ucb1x00-core.c#L161" id=3L214" cla3s="line" name="L214"> 213v3id  213{31a href="drivers/mfd/ucb1x00-core.c#L126" id=3L216" cla3s="line" name="L216"> 213 31 href="drivers/mfd/ucb1x00-core.c#L127" id=3L217" cla3s="line" name="L217"> 213
3a hrefoid maskgpio_setss=_ass=uct nt s"sref">ucb1x00_str>nt shreff="+code=ucb" clant s"sref">ucb1x00_nt shrefh="drivers/mfd/ucb1x00-core.c#L161" id=3L804" cla3s="line" name="L218"> 213 3      f="drivers/mfd/ucb1x00-core.c#L157" id=3L904" cla3s="line" name="L219"> 213
319            a href="+code=ucb1x00" class="sref">ucb1x00 *ucb = ucb1x00_str>nt s(str_str>rn>
>nt shref="+code=ucb" clant s"sref">ucb1x00_nt shrefhf="drivers/mfd/ucb1x00-core.c#L149" id=3L220" cla3s="line" name="L220"> 223 3      mask)) {
ucb1x00_nt shrefhref="+code=adc_cr" " c"sref">ucb1x00_struct  -="+code=ucb" class="sref">ucb->irq_base +  223 32 href="drivers/mfd/ucb1x00-core.c#L182" id=3L222" cla3s="line" name="La"+cod373ef="+32     irq_baseraw_k_irqsavehref=href="+code=ucb" class="sref">ucb->ass="sref">io_lockass=a hrhf="drivers/mfd/ucb1x00-core.c#L149" id=3L203" cla3-core.c#L131" id="L131" 3lass=32     ucb->mask" class=a hr~mask;
 *<822831ef="drivers/mfd/ucne" n3me="L32             "+code=mutex_logpio_setss=_updhe "sref">spin_unlgpio_setss=_updhe uct <"+code=ucb" class="sref">ucb, mask)) {
mask;
mutex_loraw_k_irqrqresthref=href="+code=ucb" class="sref">ucb->ass="sref">io_lockass=a hrhf="drivers/mfd/ucb1x00-core.c#L149" id=3L216" cla3s="line" name="L126"> 123
32an clf="drivers/mfd/ucb1x00-core.c#L126" id=3L127" cla3s="line" name="L127"> 123s32 href="drivers/mfd/ucb1x00-core.c#L218" id=3L218" cla3s="line" name="L128"> 123{32an cloid maskgpio_setss=_unass=uct nt s"sref">ucb1x00_str>nt shreff="+code=ucb" clant s"sref">ucb1x00_nt shrefh="drivers/mfd/ucb1x00-core.c#L161" id=3L129" cla3s="line" name="L129"> 123 32     f="drivers/mfd/ucb1x00-core.c#L173" id=3L130" cla3s="line" name="L130"> 133 33     ucb1x00 *ucb = ucb1x00_str>nt s(str_str>rn>
>nt shref="+code=ucb" clant s"sref">ucb1x00_nt shrefhf="drivers/mfd/ucb1x00-core.c#L173" id=3L211" cla3s="line" name="L131"> 133
33     mask)) {
ucb1x00_nt shrefhref="+code=adc_cr" " c"sref">ucb1x00_struct  -="+code=ucb" class="sref">ucb->irq_base +  133 33an cl="drivers/mfd/ucb1x00-core.c#L126" id=3L133" cla3s="line" name="L133"> 133 33     irq_baseraw_k_irqsavehref=href="+code=ucb" class="sref">ucb->ass="sref">io_lockass=a hrhf="drivers/mfd/ucb1x00-core.c#L149" id=3L> *<82283s="line" name="L134"> 133 33             "+code=mutex_logpi"sref">ucb->mask" class=a hr~ef="+code=mask" class="sref">mask;
 133
335    spin_unlgpio_setss=_updhe uct <"+code=ucb" class="sref">ucb, mask)) {
 133 33     mutex_loraw_k_irqrqresthref=href="+code=ucb" class="sref">ucb->ass="sref">io_lockass=a hrhf="drivers/mfd/ucb1x00-core.c#L149" id=3L137" cla3s="line" name="L137"> 133}33a href="drivers/mfd/ucb1x00-core.c#L188" id=3L218" cla3s="line" name="L138"> 133
33 href="drivers/mfd/ucb1x00-core.c#L189" id=3L129" cla3s="line" name="L139"> 133s33an clnt oet_typ "sref">spin_unlgpio_setss=_oet_typ uct nt s"sref">ucb1x00_str>nt shreff="+code=ucb" clant s"sref">ucb1x00_nt shref,d long spin_unltyp uct h="drivers/mfd/ucb1x00-core.c#L161" id=3L140" cla3s="line" name="L140"> 143{3 143 34     ucb1x00 *ucb = ucb1x00_str>nt s(str_str>rn>
>nt shref="+code=ucb" clant s"sref">ucb1x00_nt shrefhf="drivers/mfd/ucb1x00-core.c#L173" id=3L222" cla3s="line" name="L142"> 143 3      unsigned long mask)) {
ucb1x00_nt shrefhref="+code=adc_cr" " c"sref">ucb1x00_struct  -="+code=ucb" class="sref">ucb->irq_base +  143
3a href="drivers/mfd/ucb1x00-core.c#L144" id=3L144" cla3s="line" name="L144"> 143 34             "+code=mutex_loraw_k_irqsave"sref">irq_baseraw_k_irqsavehref=href="+code=ucb" class="sref">ucb->ass="sref">io_lockass=a hrhf="drivers/mfd/ucb1x00-core.c#L149" id=3Lline" na3s="line" name="L145"> 143 34             ref="+code=old" clatyp "sref">spin_unltyp uct e href="+code=mask" clIRQ_TYPE_EDGE;RISING"sref">spin_unlIRQ_TYPE_EDGE;RISINGuct h="drivers/mfd/ucb1x00-core.c#L161" id=3L216" cla3s="line" name="L146"> 143 34             ucb->bs"sref">val " clris/a>bsa hreef="+code=mask" class="sref">mask;
 143 3       143 348            , int ucb->bs"sref">val " clris/a>bsa hremask;
 143 34 href="drivers/mfd/ucb1x00-core.c#L220" id=3L150" cla3s="line" name="L150"> 153
35     spin_unltyp uct e href="+code=mask" clIRQ_TYPE_EDGE;FALLING"sref">spin_unlIRQ_TYPE_EDGE;FALLINGuct h="drivers/mfd/ucb1x00-core.c#L161" id=3L151" cla3s="line" name="L151"> 153 3      return 0ucb->bs"sref">val " clfal/a>bsa hreef="+code=mask" class="sref">mask;
 153}352    return 0else="drivers/mfd/ucb1x00-core.c#L174" id=3L153" cla3s="line" name="L153"> 153
35             ucb->bs"sref">val " clfal/a>bsa hremask;
 153s35     ucb, mask" class=a hr~mask)) {
 153 3              , int ucb1x00_reg_write(ucb, UCB_ADC_CRucb->bs"sref">val " clris/a>bsa hre href="drivers/mfd/ucb1x00-core.c#L161" id=3L216" cla3s="line" name="L156"> 153{35             ucb, mask" class=a hrhf="drivers/mfd/ucb1x00-core.c#L149" id=3L147" cla3s="line" name="L157"> 153 357            ucb1x00_reg_write(ucb, UCB_IO_DATA< E_FAL href="+code=ucb" class="sref">ucb->bs"sref">val " clfal/a>bsa hre href="drivers/mfd/ucb1x00-core.c#L161" id=3L158" cla3s="line" name="L158"> 153 358            , int ucb, mask" class=a hrhf="drivers/mfd/ucb1x00-core.c#L149" id=3L129" cla3s="line" name="L159"> 153 35     return 0f="drivers/mfd/ucb1x00-core.c#L188" id=3L160" cla3s="line" name="L160"> 163
36     mutex_loraw_k_irqrqresthref=href="+code=ucb" class="sref">ucb->ass="sref">io_lockass=a hrhf="drivers/mfd/ucb1x00-core.c#L149" id=3L161" cla3s="line" name="L161"> 163 36 href="drivers/mfd/ucb1x00-core.c#L182" id=3L162" cla3s="line" name="L162"> 163 362    return 0;
 163 36an clf="drivers/mfd/ucb1x00-core.c#L188" id=3L144" cla3s="line" name="L164"> 163 36 href="drivers/mfd/ucb1x00-core.c#L115" id=3L165" cla3s="line" name="L165"> 163 36 hrefoid oet_wak "sref">spin_unlgpio_setss=_oet_wak uct nt s"sref">ucb1x00_str>nt shreff="+code=ucb" clant s"sref">ucb1x00_nt shref,d long ucb1x00_onuct h="drivers/mfd/ucb1x00-core.c#L161" id=3L166" cla3s="line" name="L166"> 163 36a href="drivers/mfd/ucb1x00-core.c#L157" id=3L167" cla3s="line" name="L167"> 163
36     struct ucb1x00 *ucb = ucb1x00_str>nt s(str_str>rn>
>nt shref="+code=ucb" clant s"sref">ucb1x00_nt shrefhf="drivers/mfd/ucb1x00-core.c#L173" id=3L168" cla3s="line" name="L168"> 163 368    struct nt s"sref">ucb1x00_ class=_plat>nt s href="+code=ucb" clapnt s"sref">ucb1x00_pnt s hreff="+code=ucb1x00_reg"sref">ucb->chipmc=;spin_unlattached_devic ;nt s"sref">ucb1x00_platform>nt s href="drivers/mfd/ucb1x00-core.c#L167" id=3L169" cla3s="line" name="L169"> 163 36     return 0 long mask)) {
ucb1x00_nt shrefhref="+code=adc_cr" " c"sref">ucb1x00_struct  -="+code=ucb" class="sref">ucb->irq_base +  173 37 href="drivers/mfd/ucb1x00-core.c#L161" id=3L171" cla3s="line" name="L171"> 173
37     ucb1x00_pnt s href|| !"+code=ucb" clapnt s"sref">ucb1x00_pnt s hrehref="+code=irq_basecan_wak u="sref">chipcan_wak u=uct h="drivers/mfd/ucb1x00-core.c#L161" id=3L172" cla3s="line" name="L172"> 173 3      if (!(UCB_IO_DEINVAL href="drivers/mfd/ucb1x00-core.c#L167" id=3L173" cla3s="line" name="L173"> 173 37 href="drivers/mfd/ucb1x00-core.c#L144" id=3L174" cla3s="line" name="L174"> 173 3              "+code=mutex_loraw_k_irqsave"sref">irq_baseraw_k_irqsavehref=href="+code=ucb" class="sref">ucb->ass="sref">io_lockass=a hrhf="drivers/mfd/ucb1x00-core.c#L149" id=3L175" cla3s="line" name="L175"> 173 37             ref="+code=old" claon"sref">ucb1x00_onuct h="drivers/mfd/ucb1x00-core.c#L161" id=3L176" cla3s="line" name="L176"> 173 37             ucb->spin_unl" clwak a hreef="+code=mask" class="sref">mask;
 173 37      173
378            , int ucb->spin_unl" clwak a hremask;
 173 379            "+code=mutex_loraw_k_irqrqrest"sref">mutex_loraw_k_irqrqresthref=href="+code=ucb" class="sref">ucb->ass="sref">io_lockass=a hrhf="drivers/mfd/ucb1x00-core.c#L149" id=3L180" cla3s="line" name="L180"> 183}38 href="drivers/mfd/ucb1x00-core.c#L161" id=3L181" cla3s="line" name="L181"> 183
38      183s38de=adc_mutex" class="sref">adc_rivers/mfd/uc3L173" cla3s="line" name="L183"> 183{38 href="drivers/mfd/ucb1x00-core.c#L144" id=3L174" cla3s="line" name="L184"> 183 38an cloid rn>
"sref">io_lockan>

"sref">io_lock

 183
38             ."+code=ucb" cla85">"sref">io_lock<85"> hreff="ss="comment"a hing">"core.c#" 183 386            ."+code=ucb" cla//a>as="sref">io_lockac{
noo="sref">chipgpio_setss=_noo=uct ,="drivers/mfd/ucb1x00-core.c#L157" id=3L177" cla3s="line" name="L187"> 183}38     struct <."+code=ucb" cla//a>ass="sref">mask" class=a hr~&l"+code=ucb1x00_to_irq" //a>ass="sref">maskgpio_setss=_ass=uct ,="drivers/mfd/ucb1x00-core.c#L157" id=3L178" cla3s="line" name="L188"> 183
38     unsigned."+code=ucb" cla//a>unass="sref">maskss=_unass=uct ~&l"+code=ucb1x00_to_irq" //a>unass="sref">maskgpio_setss=_unass=uct ,="drivers/mfd/ucb1x00-core.c#L157" id=3L179" cla3s="line" name="L189"> 183<389    unsigned."+code=ucb" cla//a>oet_typ "sref">spin_unlss=_oet_typ uct ~&l"+code=ucb1x00_to_irq" //a>oet_typ "sref">spin_unlgpio_setss=_oet_typ uct ,="drivers/mfd/ucb1x00-core.c#L157" id=3L190" cla3s="line" name="L190"> 193<39     oet_wak "sref">spin_unl" cloet_wak uct ~&l"+code=ucb1x00_to_irq" //a>oet_wak "sref">spin_unlgpio_setss=_oet_wak uct ,="drivers/mfd/ucb1x00-core.c#L157" id=3L181" cla3s="line" name="L191"> 193<39     }f="drivers/mfd/ucb1x00-core.c#L149" id=3L172" cla3s="line" name="L192"> 193<39an cl="drivers/mfd/ucb1x00-core.c#L126" id=3L173" cla3s="line" name="L193"> 193<39an cloid spin_unlgpio_setled_devuct ucb1x00 *ucb = spin_unlgpio_setmfd/uchreff="+code=ucb" clanrv"sref">spin_unlnrvuct h="drivers/mfd/ucb1x00-core.c#L161" id=3L174" cla3s="line" name="L194"> 193<39d  193<39             a href="+code=ucb1x00"gpio_setmev"sref">spin_unlgpio_setdevuct f="+code=ucb" clangv"sref">spin_unlnevuct f="drivers/mfd/ucb1x00-core.c#L149" id=3L176" cla3s="line" name="L196"> 193<39             ref="+code=ucb1x00_;
<"sref">mutex_loretuct ~&l-"+code=irq_baseENOMEM"sref">UCB_IO_DENOMEMuct f="drivers/mfd/ucb1x00-core.c#L149" id=3L177" cla3s="line" name="L197"> 193
39 href="drivers/mfd/ucb1x00-core.c#L218" id=3L188" cla3s="line" name="L198"> 193<39     spin_unlnevuct ~&l"+code=ucb1x00_kmalass"sref">spin_unlkmalassuct spin_unlgpio_setdevuct )f="+code=ucb" claGFP_KERNEL"sref">UCB_IO_DGFP_KERNELa hrhf="drivers/mfd/ucb1x00-core.c#L149" id=3L199" cla3s="line" name="L199"> 193<399    unsignedref="+code=old" clangv"sref">spin_unlnevuct hef="drivers/mfd/ucb1x00-core.c#L173" id=4L200" cla4s="line" name="L200"> 204<40     spin_unlnevuct href="+code=io_lock"ss="sref">ucb = ucb =  204<40     return 0spin_unlnevuct href="+code=io_lock"nrv"sref">spin_unlnrvuct ef="+code=containenrv"sref">spin_unlnrvuct f="drivers/mfd/ucb1x00-core.c#L149" id=4L201" cla4s="line" name="L192"> 194<40an cl="drivers/mfd/ucb1x00-core.c#L126" id=4L203" cla4s="line" name="L203"> 204<40             mutex_loretuct ~&l"+code=containenrv"sref">spin_unlnrvuct href="+code=adc_mutex"="sref">ucb1x00_x"=href="+code=ucb" clangv"sref">spin_unlnevuct hf="drivers/mfd/ucb1x00-core.c#L149" id=4L403" cla4s="line" name="L194"> 194<40 href="drivers/mfd/ucb1x00-core.c#L115" id=4L504" cla4s="line" name="L195"> 194<40             , int mutex_loretuct ~&= 0hef="drivers/mfd/ucb1x00-core.c#L173" id=4L604" cla4s="line" name="L196"> 194<40             val listtled_taishref=href="+code=ucb" clangv"sref">spin_unlnevuct href="+code=io_lock"nev_nod "sref">spin_unlnev_nod a hr ucb->spin_unlnevsuct hf="drivers/mfd/ucb1x00-core.c#L149" id=4L704" cla4s="line" name="L197"> 194<407            val listtled_taishref=href="+code=ucb" clangv"sref">spin_unlnevuct href="+code=io_lock"nrv_nod "sref">spin_unlnrv_nod a hr spin_unlnrvuct href="+code=adc_mutenevs"sref">spin_unlnevsuct hf="drivers/mfd/ucb1x00-core.c#L149" id=4L804" cla4s="line" name="L198"> 194<408            , int  194<409            spin_unlkfre href="+code=ucb" clangv"sref">spin_unlnevuct hf="drivers/mfd/ucb1x00-core.c#L149" id=4L210" cla4s="line" name="L210"> 214<41     adc_rivers/mfd/uc4L211" cla4s="line" name="L211"> 214<41     return 0c_mutex" class="sref">adc_rivers/mfd/uc4L201" cla4s="line" name="L212"> 214<412    return 0;
mutex_loretuct f="drivers/mfd/ucb1x00-core.c#L149" id=4L203" cla4s="line" name="L213"> 214<41an clf="drivers/mfd/ucb1x00-core.c#L188" id=4L214" cla4s="line" name="L214"> 214v41 href="drivers/mfd/ucb1x00-core.c#L115" id=4L215" cla4s="line" name="L215"> 214{41 hrefoid spin_unlgpio_setremovetmevuct spin_unlgpio_setdevuct f="+code=ucb" clangv"sref">spin_unlnevuct h="drivers/mfd/ucb1x00-core.c#L161" id=4L216" cla4s="line" name="L216"> 214 41a href="drivers/mfd/ucb1x00-core.c#L157" id=4L217" cla4s="line" name="L217"> 214
417            "+code=ucb1x00_ngv"sref">spin_unlnevuct href="+code=io_lock"nrv"sref">spin_unlnrvuct href="+code=io_lock"remove"sref">mutex_loremovehref="+code=ucb" clangv"sref">spin_unlnevuct hf="drivers/mfd/ucb1x00-core.c#L149" id=4L804" cla4s="line" name="L218"> 214 41     adc_crspin_unlnevuct href="+code=io_lock"nev_nod "sref">spin_unlnev_nod a hrhf="drivers/mfd/ucb1x00-core.c#L149" id=4L904" cla4s="line" name="L219"> 214
419            "+code=mutex_lolisttdel"sref">adc_crspin_unlnevuct href="+code=io_lock"nrv_nod "sref">spin_unlnrv_nod a hrhf="drivers/mfd/ucb1x00-core.c#L149" id=4L220" cla4s="line" name="L220"> 224 42     spin_unlkfre href="+code=ucb" clangv"sref">spin_unlnevuct hf="drivers/mfd/ucb1x00-core.c#L149" id=4L211" cla4s="line" name="L221"> 224 42an clf="drivers/mfd/ucb1x00-core.c#L126" id=4L222" cla4s="line" name="La"+cod374ef="+42an cl="drivers/mfd/ucb1x00-core.c#L126" id=4L203" cla4-core.c#L131" id="L131" 4lass=42an class="comment"> *      >
 *<822841ef="drivers/mfd/ucne" n4me="L42an class="comment"> *      funTry0e tprobe ourpt
, rae ma th="crelymask;
 *
 hard-" cld machk 124
42an class="comment"> *      ThiIRQ mapp 124s42an class="comment"> *      @u 124{42an class="comment"> *      @seeeeeeMachk 124 42an class="comment"> *
      adsbitsy        IRQ_GPCIN4 134 43an class="comment"> *      @ucccccccerfref= 134
43an class="comment"> *      Youuuuuuflexanet 134 43an class="comment"> *      ucbuuuuufre bird 134 43an class="comment"> *      Anyyyyyygraphicscli     ADS_EXTtIRQ(8) *<82284s="line" name="L134"> 134 43an class="comment"> *      functiongraphicsmas/sp  ADS_EXTtIRQ(8) 134
43an class="comment"> *
      lart 134 43an class="comment"> *      Thiiiiiiomnime/sp  href=IRQ_GPIO2an  href="drivers/mfd/ucb1x00-core.c#L190" id=4L217" cla4s="line" name="L137"> 134}43an class="comment"> *      @u href=pfs168f= 134
43an class="comment"> *      @seeeeeesimpadf= 134s43an class="comment"> *
      sh="non         SHANNON_IRQ_GPIO_IRQ_CODEC 144{44an class="comment"> *      @uccccccyopy  f= 144 44an class="comment"> *      Yo
 144 4      oid ucb1x00_to_irqucb1x00 *ucb =  144
4a hreff="drivers/mfd/ucb1x00-core.c#L157" id=4L144" cla4s="line" name="L144"> 144 44              long mask;
 144 44     ="drivers/mfd/ucb1x00-core.c#L167" id=4L216" cla4s="line" name="L146"> 144 44             "+code=ucb" claass="sref">mask;
ucb1x00_probetss=_onuct  144 447    mask)) {
 144 448            , int ucb1x00_probetss=_offhref="+code=ucb" claass="sref">mask)) {
 144 449            maskNO_IRQ href="drivers/mfd/ucb1x00-core.c#L167" id=4L150" cla4s="line" name="L150"> 154
45      154 45 href="drivers/mfd/ucb1x00-core.c#L182" id=4L152" cla4s="line" name="L152"> 154}452    return 0ass="comment"> *      >
 154
45an class="comment"> *      AAAAAAAAA* E>(
.hr href="drivers/mfd/ucb1x00-core.c#L75" id="4L144" cla4s="line" name="L154"> 154s45an class="comment"> *      fAAAAAAAA*
 154 4              "+code=ucb1x00_gpio_setre class="sref">ucb1x00_reg_write(ucb, UCB_ADC_CRUCB_ADC_CR 154{45             "+code=ucb" clagpio_setre class="sref">ucb1x00_reg_write(ucb, UCB_IO_DATA< E_FAL href="+code=ucb" claCRUCB_ADC_CR 154 457            "+code=ucb1x00_gpio_setre class="sref">ucb1x00_reg_write(ucb, UCB_IO_DIR 154 45     ucb1x00_reg_write(ucb, UCB_IO_DIR 154 45 href="drivers/mfd/ucb1x00-core.c#L220" id=4L160" cla4s="line" name="L160"> 164
46      *      >
 164 46an class="comment"> *      YAAAAAAAA* Cause ="cADCpt
.hr href="drivers/mfd/ucb1x00-core.c#L75" id="4L162" cla4s="line" name="L162"> 164 46an class="comment"> *      uAAAAAAAA*
 164 46     ucb1x00_reg_write(ucb, UCB_IO_DIRUCB_IO_DIR 164 46             "+code=mutex_logpio_sete" class="sref">ucb1x00_reg_write(ucb, UCB_IO_DIRUCB_IO_DIRUCB_IO_DIR 164 46     ="drivers/mfd/ucb1x00-core.c#L167" id=4L166" cla4s="line" name="L166"> 164 466     *      >
 164
46an class="comment"> *      @AAAAAAAA* Wait for tnt con/ucbion0e t> *plete.hr href="drivers/mfd/ucb1x00-core.c#L75" id="4L218" cla4s="line" name="L168"> 164 46an class="comment"> *      @AAAAAAAA*
 164 46     return 0whia  (="+code=ucb" class=_writeucb1x00_ss=_writeucb, UCB_IO_DIRUCB_IO_DIR 174 47     ucb1x00_reg_write(ucb, UCB_IO_DIR 174
47 href="drivers/mfd/ucb1x00-core.c#L182" id=4L172" cla4s="line" name="L172"> 174 472    return 0ass="comment"> *      >
 174 47an class="comment"> *      AAAAAAAAA* Da>(
.hr href="drivers/mfd/ucb1x00-core.c#L75" id="4L174" cla4s="line" name="L174"> 174 47an class="comment"> *      fAAAAAAAA*
 174 47             "+code=ucb1x00_gpio_setre class="sref">ucb1x00_reg_write(ucb, UCB_ADC_CR 174 47             "+code=ucb" clagpio_setre class="sref">ucb1x00_reg_write(ucb, UCB_IO_DATA< E_FAL href=0hf="drivers/mfd/ucb1x00-core.c#L167" id=4L147" cla4s="line" name="L177"> 174 477            "+code=ucb1x00_gpio_setre class="sref">ucb1x00_reg_write(ucb, UCB_IO_DIR 174
47     ucb1x00_reg_write(ucb, UCB_IO_DIR 174 47 href="drivers/mfd/ucb1x00-core.c#L220" id=4L180" cla4s="line" name="L180"> 184}48      *      >
 184
48an class="comment"> *      YAAAAAAAA* Rea= trigger
.hr href="drivers/mfd/ucb1x00-core.c#L75" id="4L172" cla4s="line" name="L182"> 184s48an class="comment"> *      uAAAAAAAA*
 184{48     ucb1x00_probetss=_offhref="+code=ucb" claass="sref">mask)) {
 184 48an clf="drivers/mfd/ucb1x00-core.c#L126" id=4L185" cla4s="line" name="L185"> 184
48     ="drivers/mfd/ucb1x00-core.c#L167" id=4L176" cla4s="line" name="L186"> 184 486    oid irq_basegpio_setremeas=uct spin_unldevic ;spin_unlnevuct h="drivers/mfd/ucb1x00-core.c#L161" id=4L177" cla4s="line" name="L187"> 184}48     f="drivers/mfd/ucb1x00-core.c#L173" id=4L178" cla4s="line" name="L188"> 184
488    struct ucb1x00 *ucb = nev_to_ class="sref">ucb1x00nev_to_ class=href="+code=ucb" clangv"sref">spin_unlnevuct hf="drivers/mfd/ucb1x00-core.c#L149" id=4L179" cla4s="line" name="L189"> 184<489            "+code=mutex_lokfre "sref">spin_unlkfre href="+code=ucb" class="sref">ucb =  194<49     f="drivers/mfd/ucb1x00-core.c#L126" id=4L181" cla4s="line" name="L191"> 194<49 href="drivers/mfd/ucb1x00-core.c#L182" id=4L172" cla4s="line" name="L192"> 194<49     oid ucb1x00     "+code=ucb1x00_gpio_setine" "sref">ucb1x00 194<49     "sref">io_lock<85"> hreffffffffffff="ss="comment"a hing">"core.c#" 194<494    irq_basenev_remeas=    irq_basegpio_setremeas=uct ,="drivers/mfd/ucb1x00-core.c#L157" id=4L185" cla4s="line" name="L195"> 194<49     }f="drivers/mfd/ucb1x00-core.c#L149" id=4L176" cla4s="line" name="L196"> 194<49     ="drivers/mfd/ucb1x00-core.c#L149" id=4L177" cla4s="line" name="L197"> 194
49 hrefoid irq_basegpio_setprobeuct chipmc=;chipmc=; 194<49     f="drivers/mfd/ucb1x00-core.c#L173" id=4L179" cla4s="line" name="L199"> 194<499    unsigneda href="+code=ucb1x00" class=_plat>nt s"sref">ucb1x00_ class=_plat>nt s href="+code=ucb" clapnt s"sref">ucb1x00_pnt s hreff="+code=ucb1x00_mc="sref">chipmc=;spin_unlattached_devic ;nt s"sref">ucb1x00_platform>nt s href="drivers/mfd/ucb1x00-core.c#L167" id=5L200" cla5s="line" name="L200"> 205<50     spin_unlgpio_setmfd/uchreff="+code=ucb" clanrv"sref">spin_unlnrvuct f="drivers/mfd/ucb1x00-core.c#L167" id=5L100" cla5s="line" name="L191"> 195<50     return 0a href="+code=ucb1x00" class="sref">ucb1x00 *ucb =  195<50     unsigned long ucb1x00_id href="+code=UCB_IO_Di"sref">ucb1x00_i href="+code=UCB_IO_Di class="sref">irq_base +  195<50             ref="+code=ucb1x00_;
<"sref">mutex_loretuct ~&l-"+code=irq_baseENODEV"sref">mutex_loENODEVa hrf="drivers/mfd/ucb1x00-core.c#L167" id=5L400" cla5s="line" name="L194"> 195<50 href="drivers/mfd/ucb1x00-core.c#L115" id=5L504" cla5s="line" name="L195"> 195<50             "ss="comment"> *      >
 Tell tnt platform0e tdeassert tnt for .c#=;
setA*
 195<50             ref="+code=old" clapnt s"sref">ucb1x00_pnt s hrefucb1x00_pnt s hrehref="+code=irq_base;
set"sref">mutex_loresetuct h="drivers/mfd/ucb1x00-core.c#L161" id=5L704" cla5s="line" name="L197"> 195<507            ucb1x00_pnt s hrehref="+code=irq_base;
set"sref">mutex_loresetuct ="+code=old" claIRUCB_IO_DIR 195<50 href="drivers/mfd/ucb1x00-core.c#L189" id=5L904" cla5s="line" name="L199"> 195<509            "+code=mutex_lomc=_e>(chipmc=_e>(chipmc=; 215<51     ucb1x00_id hreff="+code=ucb1x00_mc=teucb1x00_mc=techipmc=;UCB_IO_DIR 215<51     return 0"+code=ucb1x00_mc=tda>(ucb1x00_mc=tda>(chipmc=; 215<51an cl="drivers/mfd/ucb1x00-core.c#L126" id=5L203" cla5s="line" name="L213"> 215<513            ref="+code=old" clai="sref">ucb1x00_id href!f="+code=ucb1x00_IRUCB_IO_DIRucb1x00_id href!f="+code=ucb1x00_IRUCB_IO_DIRucb1x00_id href!f="+code=ucb1x00_IR 215v514            maskprref=href="+code=ucb" claKERN_WARNING"sref">spin_unlKERN_WARNING     "ss="comment"a hing">"for .c#=ID not found: %04x\n"ucb1x00_id hrehf="drivers/mfd/ucb1x00-core.c#L149" id=5L504" cla5s="line" name="L215"> 215{51             , int mutex_loouta hrf="drivers/mfd/ucb1x00-core.c#L167" id=5L216" cla5s="line" name="L216"> 215 51             f="drivers/mfd/ucb1x00-core.c#L126" id=5L217" cla5s="line" name="L217"> 215
51 href="drivers/mfd/ucb1x00-core.c#L218" id=5L804" cla5s="line" name="L218"> 215 51     ucb = spin_unlkzalassuct ucb1x00 *UCB_IO_DGFP_KERNELa hrhf="drivers/mfd/ucb1x00-core.c#L149" id=5L904" cla5s="line" name="L219"> 215
519            "+code=mutex_lo;
<"sref">mutex_loretuct ~&l-"+code=irq_baseENOMEM"sref">UCB_IO_DENOMEMuct f="drivers/mfd/ucb1x00-core.c#L149" id=5L220" cla5s="line" name="L220"> 225 52     ucb =  225 52     return 0mutex_loouta hrf="drivers/mfd/ucb1x00-core.c#L167" id=5L222" cla5s="line" name="La"+cod375ef="+52an cl="drivers/mfd/ucb1x00-core.c#L126" id=5L203" cla5-core.c#L131" id="L131" 5lass=52     spin_unldevic _initializeuct ucb->spin_unlnevuct hf="drivers/mfd/ucb1x00-core.c#L149" id=5a> *<822851ef="drivers/mfd/ucne" n5me="L52             "+code=mutex_logpi"sref">ucb->spin_unlnevuct ."+code=ucb" claine" "sref">ucb1x00     =ucb1x00mask;
ucb->spin_unlnevuct ."+code=ucb" clapar    sref">maskpar        =chipmc=;spin_unlattached_devic ; 125
52             "+code=ucb" clanev_oet_85">"sref">io_lockuct ucb->spin_unlnevuct ,="ss="comment"a hing">"core.c#" 125s52 href="drivers/mfd/ucb1x00-core.c#L218" id=5a804" cla5s="line" name="L128"> 125{52     mutex_loraw_k_irqsave_inituct ucb->ass="sref">io_lockass=a hrhf="drivers/mfd/ucb1x00-core.c#L149" id=5a904" cla5s="line" name="L129"> 125 529            "+code=mutex_lok_irqsave_init"sref">mutex_lok_irqsave_inituct ucb->ass="sref">io_lockass=a hrhf="drivers/mfd/ucb1x00-core.c#L149" id=5L130" cla5s="line" name="L130"> 135 53     mutex_lomutex_inituct ucb->spin_unladc_mutexa hrhf="drivers/mfd/ucb1x00-core.c#L149" id=5L100" cla5s="line" name="L131"> 135
53 href="drivers/mfd/ucb1x00-core.c#L182" id=5L222" cla5s="line" name="L132"> 135 532            "+code=ucb1x00_gpi"sref">ucb->ucb1x00_id hrefef="+code=containes="sref">ucb1x00_id href="drivers/mfd/ucb1x00-core.c#L149" id=5L203" cla5s="line" name="L133"> 135 53     ucb->chipmc=;chipmc=; *<82285s="line" name="L134"> 135 53 href="drivers/mfd/ucb1x00-core.c#L115" id=5L215" cla5s="line" name="L135"> 135
53             "+code=ucb1x00_;
<"sref">mutex_loretuct ~&l"+code=containenevic _x"="sref">ucb1x00_nevic _x"=uct ucb->spin_unlnevuct hf="drivers/mfd/ucb1x00-core.c#L149" id=5L216" cla5s="line" name="L136"> 135 53             ref="+code=old" cla;
<"sref">mutex_loretuct h="drivers/mfd/ucb1x00-core.c#L149" id=5L217" cla5s="line" name="L137"> 135}537            ucb1x00_err_dev_x"=; 135
53 href="drivers/mfd/ucb1x00-core.c#L189" id=5L904" cla5s="line" name="L139"> 135s539            "+code=mutex_logpio_sete>(chipgpio_sete>(ucb =  145{54     ucb->io_lockucb1x00_to_irqucb =  145 54     return 0"+code=ucb1x00_to_irq(ucb1x00_to_irq(ucb =  145 542            ref="+code=old" claena"sref">ucb->io_lockmaskNO_IRQ hrehef="drivers/mfd/ucb1x00-core.c#L173" id=5L133" cla5s="line" name="L143"> 145
54             io_lockucb->spin_unlnevuct ,="ss="comment"a hing">"IRQ probe failed\n" *<82285s="line" name="L144"> 145 544            mutex_loretuct ~&l-"+code=irq_baseENODEV"sref">mutex_loENODEVa hrf="drivers/mfd/ucb1x00-core.c#L167" id=5Lline" na5s="line" name="L145"> 145 54             , int ucb1x00_err_notss=a hrf="drivers/mfd/ucb1x00-core.c#L167" id=5L216" cla5s="line" name="L146"> 145 54             f="drivers/mfd/ucb1x00-core.c#L126" id=5L147" cla5s="line" name="L147"> 145 54 href="drivers/mfd/ucb1x00-core.c#L218" id=5L218" cla5s="line" name="L148"> 145 54     ucb = ucb gpiouct ."+code=ucb" claass="sref">irq_base +  145 549            "+code=mutex_loi class="sref">irq_base + ucb1x00_pnt s href?="+code=UCB_IO_Dpnt s"sref">ucb1x00_pnt s hrehref="+code=irq_basei class="sref">irq_base +  155
55     ucb->irq_base + alass/desc "sref">ucb1x00alass/desc uct <-1f="+code=UCB_IO_Di class="sref">irq_base +  155 551            ref="+code=old" claena"sref">ucb->irq_base +  155}552    return 0io_lockucb->spin_unlnevuct ,="ss="comment"a hing">"u>( 155
55             ucb->irq_base +  *<82285s="line" name="L154"> 155s554            alass"sref">ucb1x00_err_//a>alassa hrf="drivers/mfd/ucb1x00-core.c#L167" id=5L155" cla5s="line" name="L155"> 155 5              f="drivers/mfd/ucb1x00-core.c#L126" id=5L216" cla5s="line" name="L156"> 155{55     ="drivers/mfd/ucb1x00-core.c#L149" id=5L147" cla5s="line" name="L157"> 155 557            for ="+code=old" clai"sref">irq_baseirq_baseirq_base 155 558            , int io_lockucb->irq_base + irq_base 155 55 href="drivers/mfd/ucb1x00-core.c#L220" id=5L160" cla5s="line" name="L160"> 165
56     
_and_handluc"sref">spin_unl /aloet_rn>
_and_handlucuct <"+code=ucb" clai/a"sref">io_lock
"sref">io_lock

ucb1x00_handlu_edgetss=a hrhf="drivers/mfd/ucb1x00-core.c#L149" id=5L161" cla5s="line" name="L161"> 165 56     return 0ucb1x00_ /aloet_rn>
_nt suct <"+code=ucb" clai/a"sref">io_lockucb =  165 562    return 0ucb1x00io_lockUCB_IO_DIRQF_VAL D    r|="+code=UCB_IO_DIRQ_NOREQUEST"sref">UCB_IO_DIRQ_NOREQUESTa hrhf="drivers/mfd/ucb1x00-core.c#L149" id=5L153" cla5s="line" name="L163"> 165 56      165 56 href="drivers/mfd/ucb1x00-core.c#L115" id=5L155" cla5s="line" name="L165"> 165 56             "+code=ucb1x00_ /aloet_ /altyp "sref">spin_unlss=_oet_ /altyp uct <"+code=ucb" class="sref">ucb = io_lockspin_unlIRQ_TYPE_EDGE;RISINGa hrhf="drivers/mfd/ucb1x00-core.c#L149" id=5L216" cla5s="line" name="L166"> 165 56             "+code=ucb" class=_oet_handluc_nt s"sref">ucb1x00_ /aloet_handluc_nt suct <"+code=ucb" class="sref">ucb = io_lockucb =  165
567            "+code=ucb1x00_ /aloet_rnae="d_handluc"sref">spin_unl /aloet_rnae="d_handlucuct <"+code=ucb" class="sref">ucb = io_lockio_lock 165 56 href="drivers/mfd/ucb1x00-core.c#L189" id=5L129" cla5s="line" name="L169"> 165 569    unsignedref="+code=old" clapnt s"sref">ucb1x00_pnt s hrefucb1x00_pnt s hrehref="+code=irq_basegpiolass="sref">irq_basegpiolass= hrehef="drivers/mfd/ucb1x00-core.c#L173" id=5L170" cla5s="line" name="L170"> 175 57     ucb = ucb gpiouct ."+code=ucb" clalabel"sref">adc_cr"sref">io_lockuct ucb->spin_unlnevuct hf="drivers/mfd/ucb1x00-core.c#L149" id=5L161" cla5s="line" name="L171"> 175
57     return 0ucb = ucb gpiouct ."+code=ucb" clanev"sref">spin_unlnevuct  =ucb->spin_unlnevuct f="drivers/mfd/ucb1x00-core.c#L149" id=5L162" cla5s="line" name="L172"> 175 572    return 0ucb = ucb gpiouct ."+code=ucb" claownuc"sref">spin_unlownucuct ~&l"+code=containeTHIS_MODULE"sref">UCB_IO_DTHIS_MODULEuct f="drivers/mfd/ucb1x00-core.c#L149" id=5L153" cla5s="line" name="L173"> 175 57             ucb = ucb gpiouct ."+code=ucb" claass="sref">irq_base + ucb1x00_pnt s hrehref="+code=irq_basegpiolass="sref">irq_basegpiolass= href="drivers/mfd/ucb1x00-core.c#L149" id=5L144" cla5s="line" name="L174"> 175 574            ucb = ucb gpiouct ."+code=ucb" clangpio"sref">ucb ngpiouct ~&l10f="drivers/mfd/ucb1x00-core.c#L149" id=5L175" cla5s="line" name="L175"> 175 57             , int ucb = ucb gpiouct ."+code=ucb" claset"sref">mutex_losetuct ~&l"+code=containeto_irq" gpiolset"sref">mutex_loto_irq" gpiolset href="drivers/mfd/ucb1x00-core.c#L149" id=5L216" cla5s="line" name="L176"> 175 57             , int ucb = ucb gpiouct ."+code=ucb" claget"sref">mutex_logetuct ~&l"+code=containeto_irq" gpiolget"sref">mutex_loto_irq" gpiolget href="drivers/mfd/ucb1x00-core.c#L149" id=5L147" cla5s="line" name="L177"> 175 577            ucb = ucb gpiouct ."+code=ucb" clanirection_input"sref">mutex_lonirection_inputuct ~&l"+code=containeto_irq" gpiolnirection_input"sref">mutex_loto_irq" gpiolnirection_input href="drivers/mfd/ucb1x00-core.c#L149" id=5L218" cla5s="line" name="L178"> 175
578            , int ucb = ucb gpiouct ."+code=ucb" clanirection_output"sref">mutex_lonirection_outputuct ~&l"+code=containeto_irq" gpiolnirection_output"sref">mutex_loto_irq" gpiolnirection_output href="drivers/mfd/ucb1x00-core.c#L149" id=5L129" cla5s="line" name="L179"> 175 579            ucb = ucb gpiouct ."+code=ucb" clatotss="sref">ucb1x00_totss=a hr~&l"+code=containeto_irq" totss="sref">ucb1x00_to_irq" totss= href="drivers/mfd/ucb1x00-core.c#L149" id=5L180" cla5s="line" name="L180"> 185}58     mutex_loretuct ~&l"+code=containegpiorn>
_a"="sref">ucb1x00_gpiorn>
_a"=uct ucb->ucb gpiouct hf="drivers/mfd/ucb1x00-core.c#L149" id=5L181" cla5s="line" name="L181"> 185
58     return 0mutex_loretuct h="drivers/mfd/ucb1x00-core.c#L149" id=5L172" cla5s="line" name="L182"> 185s582    return 0ucb1x00_err_gpiolx"= href="drivers/mfd/ucb1x00-core.c#L149" id=5L153" cla5s="line" name="L183"> 185{58      185 584            ucb nev_infouct ucb->spin_unlnevuct ,="ss="comment"a hing">"gpiolass= not setAso no gpiolib support" 185
58     ="drivers/mfd/ucb1x00-core.c#L167" id=5L176" cla5s="line" name="L186"> 185 58             "+code=ucb" claacploet_drvnt s"sref">ucb1x00_acploet_drvnt suct <"+code=ucb" claac="sref">chipmc=;ucb =  185}58 href="drivers/mfd/ucb1x00-core.c#L218" id=5L178" cla5s="line" name="L188"> 185
588    struct ucb1x00_pnt s hreh="drivers/mfd/ucb1x00-core.c#L149" id=5L129" cla5s="line" name="L189"> 185<589            ucb1x00_nevic _oet_wakeup_cap(ucb->spin_unlnevuct ,="+code=UCB_IO_Dpnt s"sref">ucb1x00_pnt s hrehref="+code=irq_basecan_wakeup"sref">ucb1x00_can_wakeupa hrhf="drivers/mfd/ucb1x00-core.c#L149" id=5L190" cla5s="line" name="L190"> 195<59     ="drivers/mfd/ucb1x00-core.c#L149" id=5L181" cla5s="line" name="L191"> 195<59     return 0"+code=ucb1x00_INIT_LIST_HEAD"sref">UCB_IO_DINIT_LIST_HEADuct ucb->ucb1x00 195<592            "+code=ucb1x00_mutex_ass="sref">io_lockspin_unlss=irq" mutexa hrhf="drivers/mfd/ucb1x00-core.c#L149" id=5L153" cla5s="line" name="L193"> 195<59     adc_crucb->ucb nockuct  ucb1x00 195<594    adc_crspin_unlnrvuct  ucb1x00ucb nockuct hef="drivers/mfd/ucb1x00-core.c#L173" id=5L185" cla5s="line" name="L195"> 195<59             , int spin_unlss=o_setx"=_nevuct <"+code=ucb" class="sref">ucb = spin_unlnrvuct hf="drivers/mfd/ucb1x00-core.c#L149" id=5L176" cla5s="line" name="L196"> 195<59             f="drivers/mfd/ucb1x00-core.c#L126" id=5L177" cla5s="line" name="L197"> 195
597            "+code=ucb1x00_mutex_unass="sref">io_lockspin_unlss=irq" mutexa hrhf="drivers/mfd/ucb1x00-core.c#L149" id=5L178" cla5s="line" name="L198"> 195<59 href="drivers/mfd/ucb1x00-core.c#L189" id=5L179" cla5s="line" name="L199"> 195<599    unsigned;
mutex_loretuct f="drivers/mfd/ucb1x00-core.c#L149" id=6L200" cla6s="line" name="L200"> 206<60     ="drivers/mfd/ucb1x00-core.c#L149" id=6L100" cla6s="line" name="L191"> 196<60     r"+code=UCB_IO_Derr_gpiolx"="sref">ucb1x00_err_gpiolx"= hre:="drivers/mfd/ucb1x00-core.c#L149" id=6L200" cla6s="line" name="L192"> 196<602            "+code=ucb1x00_ /aloet_rnae="d_handluc"sref">spin_unl /aloet_rnae="d_handlucuct <"+code=ucb" class="sref">ucb = io_lockUCB_IO_DNULLa hrhf="drivers/mfd/ucb1x00-core.c#L149" id=6L300" cla6s="line" name="L193"> 196<60      "+code=UCB_IO_Derr_//a>alass"sref">ucb1x00_err_//a>alassa hr:="drivers/mfd/ucb1x00-core.c#L149" id=6L400" cla6s="line" name="L194"> 196<604    ucb->irq_base +  196<60             , int ucb1x00free_desc uct <"+code=ucb" class="sref">ucb = irq_base +  196<60      "+code=UCB_IO_Derr_notss="sref">ucb1x00_err_notss=a hr:="drivers/mfd/ucb1x00-core.c#L149" id=6L700" cla6s="line" name="L197"> 196<607            "+code=ucb1x00_nevic _del"sref">adc_crucb->spin_unlnevuct hf="drivers/mfd/ucb1x00-core.c#L149" id=6L804" cla6s="line" name="L198"> 196<60 hreft"+code=UCB_IO_Derr_dev_x"="sref">ucb1x00_err_dev_x"=; 196<609            "+code=mutex_loput_devic "sref">spin_unlput_devic uct ucb->spin_unlnevuct hf="drivers/mfd/ucb1x00-core.c#L149" id=6L210" cla6s="line" name="L210"> 216<61     <"+code=ucb" claout"sref">mutex_loouta hr:="drivers/mfd/ucb1x00-core.c#L149" id=6L100" cla6s="line" name="L211"> 216<611            ref="+code=old" clapnt s"sref">ucb1x00_pnt s hrefucb1x00_pnt s hrehref="+code=irq_base;
set"sref">mutex_loresetuct h="drivers/mfd/ucb1x00-core.c#L161" id=6L200" cla6s="line" name="L212"> 216<612    return 0ucb1x00_pnt s hrehref="+code=irq_base;
set"sref">mutex_loresetuct ="+code=old" claIRUCB_IO_DATA 216<61     mutex_loretuct f="drivers/mfd/ucb1x00-core.c#L149" id=6L214" cla6s="line" name="L214"> 216v61an clf="drivers/mfd/ucb1x00-core.c#L126" id=6L504" cla6s="line" name="L215"> 216{61     ="drivers/mfd/ucb1x00-core.c#L167" id=6L216" cla6s="line" name="L216"> 216 616    oid ucb1x00_to_irqchipmc=;chipmc=; 216
61     f="drivers/mfd/ucb1x00-core.c#L173" id=6L804" cla6s="line" name="L218"> 216 618    struct nt s"sref">ucb1x00_ class=_plat>nt s href="+code=ucb" clapnt s"sref">ucb1x00_pnt s hreff="+code=ucb1x00_mc="sref">chipmc=;spin_unlattached_devic ;nt s"sref">ucb1x00_platform>nt s href="drivers/mfd/ucb1x00-core.c#L167" id=6L904" cla6s="line" name="L219"> 216
619    unsigneda href="+code=ucb1x00" class="sref">ucb1x00_ class= href="+code=ucb" class="sref">ucb->ucb1x00_acplget_drvnt suct <"+code=ucb" claac="sref">chipmc=; 226 62     ucb1x00_listlhea= href="+code=ucb" clal"sref">adc_crucb n href="drivers/mfd/ucb1x00-core.c#L167" id=6L100" cla6s="line" name="L221"> 226 62     return 0ref="+code=ucb1x00_;
<"sref">mutex_loretuct f="drivers/mfd/ucb1x00-core.c#L167" id=6L200" cla6s="line" name="La"+cod376ef="+62an cl="drivers/mfd/ucb1x00-core.c#L126" id=6L203" cla6-core.c#L131" id="L131" 6lass=62     io_lockspin_unlss=irq" mutexa hrhf="drivers/mfd/ucb1x00-core.c#L149" id=6a> *<822861ef="drivers/mfd/ucne" n6me="L62             "+code=mutex_lolistldel"sref">adc_crucb->ucb nockuct hf="drivers/mfd/ucb1x00-core.c#L149" id=6a504" cla6e="sref">mask;
ucb listlfor_each_safkuct <"+code=ucb" clal"sref">adc_crucb n hre ucb->ucb1x00 126
62             , int spin_unlss=o_setnevuct  ="+code=ucb" clanev"sref">spin_unlnevuct  =<"+code=ucb1x00_listlentry"sref">adc_cradc_crspin_unlss=o_setnevuct ,="+code=UCB_IO_Dnev_8ock"sref">ucb nev_8ockuct hf="drivers/mfd/ucb1x00-core.c#L149" id=6a217" cla6s="line" name="L127"> 126s627            spin_unlss=o_setremov tmevuct <"+code=ucb" clanev"sref">spin_unlnevuct hf="drivers/mfd/ucb1x00-core.c#L149" id=6a804" cla6s="line" name="L128"> 126{62      126 629            "+code=mutex_lomutex_unass="sref">io_lockspin_unlss=irq" mutexa hrhf="drivers/mfd/ucb1x00-core.c#L149" id=6L130" cla6s="line" name="L130"> 136 63     ="drivers/mfd/ucb1x00-core.c#L149" id=6L100" cla6s="line" name="L131"> 136
631            ref="+code=old" claena"sref">ucb->ucb gpiouct ."+code=ucb" claass="sref">irq_base +  136 632    return 0mutex_loretuct ~&l"+code=containegpiorn>
_remov "sref">ucb1x00_gpiorn>
_remov uct ucb->ucb gpiouct hf="drivers/mfd/ucb1x00-core.c#L149" id=6L203" cla6s="line" name="L133"> 136 63             mutex_loretuct h="drivers/mfd/ucb1x00-core.c#L149" id=6L> *<82286s="line" name="L134"> 136 634            io_lockucb->spin_unlnevuct ,="ss="comment"a hing">"Can't remov  gpio rn>
: %d\n"mutex_loretuct hf="drivers/mfd/ucb1x00-core.c#L149" id=6L504" cla6s="line" name="L135"> 136
63             f="drivers/mfd/ucb1x00-core.c#L126" id=6L216" cla6s="line" name="L136"> 136 63     ="drivers/mfd/ucb1x00-core.c#L149" id=6L217" cla6s="line" name="L137"> 136}637            "+code=ucb1x00_ /aloet_rnae="d_handluc"sref">spin_unl /aloet_rnae="d_handlucuct <"+code=ucb" class="sref">ucb = io_lockUCB_IO_DNULLa hrhf="drivers/mfd/ucb1x00-core.c#L149" id=6L804" cla6s="line" name="L138"> 136
63     ucb1x00free_desc uct <"+code=ucb" class="sref">ucb = irq_base +  136s639            "+code=mutex_lonevic _unregistuc"sref">spin_unlnevic _unregistucuct ucb->spin_unlnevuct hf="drivers/mfd/ucb1x00-core.c#L149" id=6L140" cla6s="line" name="L140"> 146{64     ="drivers/mfd/ucb1x00-core.c#L149" id=6L100" cla6s="line" name="L141"> 146 641            ref="+code=old" clapnt s"sref">ucb1x00_pnt s hrefucb1x00_pnt s hrehref="+code=irq_base;
set"sref">mutex_loresetuct h="drivers/mfd/ucb1x00-core.c#L161" id=6L222" cla6s="line" name="L142"> 146 642    return 0ucb1x00_pnt s hrehref="+code=irq_base;
set"sref">mutex_loresetuct ="+code=old" claIRUCB_IO_DIR 146
64     f="drivers/mfd/ucb1x00-core.c#L126" id=6L> *<82286s="line" name="L144"> 146 64 href="drivers/mfd/ucb1x00-core.c#L115" id=6Lline" na6s="line" name="L145"> 146 64     ref="+code=ucb1x00_io_read"registuctmfd/uc"sref">spin_unlgpio_setregistuctmfd/ucuct =a href="+code=ucb1x00"gpio_setnfd/uc"sref">spin_unlss=o_setnfd/ucuct f="+code=ucb" clanrv"sref">spin_unlnrvuct h="drivers/mfd/ucb1x00-core.c#L161" id=6L216" cla6s="line" name="L146"> 146 64     f="drivers/mfd/ucb1x00-core.c#L173" id=6L147" cla6s="line" name="L147"> 146 647            a href="+code=ucb1x00" class="sref">ucb1x00 *ucb =  146 64 href="drivers/mfd/ucb1x00-core.c#L189" id=6L904" cla6s="line" name="L149"> 146 649            "+code=mutex_loINIT_LIST_HEAD"sref">UCB_IO_DINIT_LIST_HEADuct spin_unlnrvuct href="+code=io_lock"nev "sref">ucb1x00 156
65     io_lockspin_unlss=irq" mutexa hrhf="drivers/mfd/ucb1x00-core.c#L149" id=6L151" cla6s="line" name="L151"> 156 65     return 0"+code=ucb1x00_listlx"=_tail"sref">adc_crspin_unlnrvuct href="+code=io_lock"nock"sref">ucb nockuct  ucb1x00 156}652            "+code=ucb1x00_listlfor_each_entry"sref">adc_crucb = ucb1x00ucb nockuct hef="drivers/mfd/ucb1x00-core.c#L173" id=6L153" cla6s="line" name="L153"> 156
65             spin_unlss=o_setx"=_nevuct <"+code=ucb" class="sref">ucb = spin_unlnrvuct hf="drivers/mfd/ucb1x00-core.c#L149" id=6L> *<82286s="line" name="L154"> 156s654            f="drivers/mfd/ucb1x00-core.c#L126" id=6L155" cla6s="line" name="L155"> 156 65             "+code=ucb1x00_mutex_unass="sref">io_lockspin_unlss=irq" mutexa hrhf="drivers/mfd/ucb1x00-core.c#L149" id=6L216" cla6s="line" name="L156"> 156{65             ;
 156 657    f="drivers/mfd/ucb1x00-core.c#L126" id=6L218" cla6s="line" name="L158"> 156 65 href="drivers/mfd/ucb1x00-core.c#L189" id=6L904" cla6s="line" name="L159"> 156 65 hrefhref="+code=ucb1x00_gpio_setunregistuctnfd/uc"sref">spin_unlss=o_setunregistuctnfd/ucuct =a href="+code=ucb1x00"gpio_setnfd/uc"sref">spin_unlss=o_setnfd/ucuct f="+code=ucb" clanrv"sref">spin_unlnrvuct h="drivers/mfd/ucb1x00-core.c#L161" id=6L160" cla6s="line" name="L160"> 166
66     f="drivers/mfd/ucb1x00-core.c#L173" id=6L161" cla6s="line" name="L161"> 166 66     return 0a href="+code=ucb1x00"listlhea="sref">ucb1x00_listlhea= href="+code=ucb" clan"sref">ucb n hre <="+code=ucb" clal"sref">adc_cr 166 66an cl="drivers/mfd/ucb1x00-core.c#L126" id=6L153" cla6s="line" name="L163"> 166 66     io_lockspin_unlss=irq" mutexa hrhf="drivers/mfd/ucb1x00-core.c#L149" id=6L144" cla6s="line" name="L164"> 166 66             "+code=mutex_lolistldel"sref">adc_crspin_unlnrvuct href="+code=io_lock"nock"sref">ucb nockuct hf="drivers/mfd/ucb1x00-core.c#L149" id=6L155" cla6s="line" name="L165"> 166 66             "+code=ucb1x00_listlfor_each_safk"sref">ucb listlfor_each_safkuct <"+code=ucb" clal"sref">adc_crucb n hre spin_unlnrvuct href="+code=io_lock"nev "sref">ucb1x00 166 66             , int spin_unlss=o_setnevuct  ="+code=ucb" clanev"sref">spin_unlnevuct  =<"+code=ucb1x00_listlentry"sref">adc_cradc_crspin_unlss=o_setnevuct ,="+code=UCB_IO_Dnrv_8ock"sref">ucb nrv_8ockuct hf="drivers/mfd/ucb1x00-core.c#L149" id=6L147" cla6s="line" name="L167"> 166
667            spin_unlss=o_setremov tmevuct <"+code=ucb" clanev"sref">spin_unlnevuct hf="drivers/mfd/ucb1x00-core.c#L149" id=6L218" cla6s="line" name="L168"> 166 66      166 669            "+code=mutex_lomutex_unass="sref">io_lockspin_unlss=irq" mutexa hrhf="drivers/mfd/ucb1x00-core.c#L149" id=6L170" cla6s="line" name="L170"> 176 67     f="drivers/mfd/ucb1x00-core.c#L126" id=6L161" cla6s="line" name="L171"> 176
67 href="drivers/mfd/ucb1x00-core.c#L182" id=6L162" cla6s="line" name="L172"> 176 672    oid ucb1x00_io_read"suspen=uct =a href="+code=ucb1x00"devic "sref">spin_unldevic ;spin_unlnevuct h="drivers/mfd/ucb1x00-core.c#L161" id=6L153" cla6s="line" name="L173"> 176 67     f="drivers/mfd/ucb1x00-core.c#L173" id=6L144" cla6s="line" name="L174"> 176 674            a href="+code=ucb1x00" class=_plat>nt s"sref">ucb1x00_ class=_plat>nt s href="+code=ucb" clapnt s"sref">ucb1x00_pnt s hreff="+code=ucb1x00_nev"sref">spin_unlnevuct href="+code=io_lock"platform>nt s"sref">ucb1x00_platform>nt s href="drivers/mfd/ucb1x00-core.c#L167" id=6L175" cla6s="line" name="L175"> 176 67             a href="+code=ucb1x00" class="sref">ucb1x00_ class= href="+code=ucb" class="sref">ucb->ucb1x00_nev_get_drvnt suct <"+code=ucb" clanev"sref">spin_unlnevuct hf="drivers/mfd/ucb1x00-core.c#L149" id=6L216" cla6s="line" name="L176"> 176 67             a href="+code=ucb1x00"gpio_setmev"sref">spin_unlss=o_setnevuct  ="+code=ucb" claumev"sref">spin_unlsnevuct f="drivers/mfd/ucb1x00-core.c#L149" id=6L147" cla6s="line" name="L177"> 176 67 href="drivers/mfd/ucb1x00-core.c#L218" id=6L218" cla6s="line" name="L178"> 176
67     io_lockspin_unlss=irq" mutexa hrhf="drivers/mfd/ucb1x00-core.c#L149" id=6L129" cla6s="line" name="L179"> 176 679            "+code=mutex_lolistlfor_each_entry"sref">adc_crspin_unlsnevuct  ucb->ucb1x00ucb nev_8ockuct hef="drivers/mfd/ucb1x00-core.c#L173" id=6L180" cla6s="line" name="L180"> 186}68     spin_unlsnevuct href="+code=io_lock"nrv"sref">spin_unlnrvuct href="+code=io_lock"suspen="sref">ucb1x00_suspen=uct h="drivers/mfd/ucb1x00-core.c#L161" id=6L181" cla6s="line" name="L181"> 186
68     return 0spin_unlsnevuct href="+code=io_lock"nrv"sref">spin_unlnrvuct href="+code=io_lock"suspen="sref">ucb1x00_suspen=uct ="+code=old" claemev"sref">spin_unlsnevuct hf="drivers/mfd/ucb1x00-core.c#L149" id=6L172" cla6s="line" name="L182"> 186s682    return 0f="drivers/mfd/ucb1x00-core.c#L126" id=6L153" cla6s="line" name="L183"> 186{68     io_lockspin_unlss=irq" mutexa hrhf="drivers/mfd/ucb1x00-core.c#L149" id=6L144" cla6s="line" name="L184"> 186 68 href="drivers/mfd/ucb1x00-core.c#L115" id=6L185" cla6s="line" name="L185"> 186
68             ref="+code=old" claena"sref">ucb->ucb- /alwakeuct hef="drivers/mfd/ucb1x00-core.c#L173" id=6L216" cla6s="line" name="L186"> 186 68             , int ucb1x00 186}68 href="drivers/mfd/ucb1x00-core.c#L218" id=6L178" cla6s="line" name="L188"> 186
688            , int ucb1x00_raw_spin_ass=tss=sav uct ucb->io_lock< /alass=a hr,="+code=UCB_IO_Dflag "sref">ucb1x00 186<689            (chipgpio_sete>(ucb =  196<69     ucb1x00_to_irqucb = ucb IRucb->bl"sref">adc_crbl     196<69     return 0ucb->ucb- /alwakeuct h=="drivers/mfd/ucb1x00-core.c#L149" id=6L172" cla6s="line" name="L192"> 196<692    return 0ucb1x00_to_irqucb = UCB_IO_DATAucb->bl"sref">adc_crbl     196<69             ucb->ucb- /alwakeuct h=="drivers/mfd/ucb1x00-core.c#L149" id=6L144" cla6s="line" name="L194"> 196<694            chipgpio_setnis(ucb =  196<69             , int ucb1x00_raw_spin_unass=tss=rest49"uct ucb->io_lock< /alass=a hr,="+code=UCB_IO_Dflag "sref">ucb1x00 196<69     ="drivers/mfd/ucb1x00-core.c#L149" id=6L177" cla6s="line" name="L197"> 196
697            ucb-e>(ucb = io_lock 196<69     ucb1x00_pnt s hrefucb1x00_pnt s hrehref="+code=irq_base;
set"sref">mutex_loresetuct h="drivers/mfd/ucb1x00-core.c#L161" id=6L179" cla6s="line" name="L199"> 196<699            ucb1x00_pnt s hrehref="+code=irq_base;
set"sref">mutex_loresetuct ="+code=old" claIRUCB_IO_DIR 207<70     ="drivers/mfd/ucb1x00-core.c#L149" id=7L100" cla7s="line" name="L191"> 197<70     return 0;
 197<702    f="drivers/mfd/ucb1x00-core.c#L126" id=7L300" cla7s="line" name="L193"> 197<70     ="drivers/mfd/ucb1x00-core.c#L126" id=7L400" cla7s="line" name="L194"> 197<704    oid "sref">io_lockuct =a href="+code=ucb1x00"devic "sref">spin_unldevic ;spin_unlnevuct h="drivers/mfd/ucb1x00-core.c#L161" id=7L500" cla7s="line" name="L195"> 197<70     f="drivers/mfd/ucb1x00-core.c#L173" id=7L600" cla7s="line" name="L196"> 197<70             a href="+code=ucb1x00"gpio_setplat>nt s"sref">ucb1x00_ class=_plat>nt s href="+code=ucb" clapnt s"sref">ucb1x00_pnt s hreff="+code=ucb1x00_nev"sref">spin_unlnevuct href="+code=io_lock"platform>nt s"sref">ucb1x00_platform>nt s href="drivers/mfd/ucb1x00-core.c#L167" id=7L700" cla7s="line" name="L197"> 197<707            a href="+code=ucb1x00" class="sref">ucb1x00 *ucb = ucb1x00_nev_get_drvnt suct <"+code=ucb" clanev"sref">spin_unlnevuct hf="drivers/mfd/ucb1x00-core.c#L149" id=7L804" cla7s="line" name="L198"> 197<708    struct spin_unlss=o_setnevuct  ="+code=ucb" claumev"sref">spin_unlsnevuct f="drivers/mfd/ucb1x00-core.c#L149" id=7L904" cla7s="line" name="L199"> 197<70 href="drivers/mfd/ucb1x00-core.c#L220" id=7L210" cla7s="line" name="L210"> 217<71     ucb->ucb- /alwakeuct fucb1x00_pnt s hrefucb1x00_pnt s hrehref="+code=irq_base;
set"sref">mutex_loresetuct h="drivers/mfd/ucb1x00-core.c#L161" id=7L100" cla7s="line" name="L211"> 217<71     return 0ucb1x00_pnt s hrehref="+code=irq_base;
set"sref">mutex_loresetuct ="+code=old" claIRUCB_IO_DIR 217<71an cl="drivers/mfd/ucb1x00-core.c#L126" id=7L300" cla7s="line" name="L213"> 217<71     (chipgpio_sete>(ucb =  217v71             "+code=mutex_loss=o_setreg_writ "sref">ucb1x00_to_irqucb = UCB_IO_DATAucb->mutex_lo o_outa hrhf="drivers/mfd/ucb1x00-core.c#L149" id=7L500" cla7s="line" name="L215"> 217{71             "+code=ucb1x00_ss=o_setreg_writ "sref">ucb1x00_to_irqucb = UCB_IO_DATAucb->spin_unl o_dica hrhf="drivers/mfd/ucb1x00-core.c#L149" id=7L600" cla7s="line" name="L216"> 217 71     ="drivers/mfd/ucb1x00-core.c#L149" id=7L217" cla7s="line" name="L217"> 217
717    ucb->ucb- /alwakeuct hef="drivers/mfd/ucb1x00-core.c#L173" id=7L804" cla7s="line" name="L218"> 217 718            , int ucb1x00 217
71 href="drivers/mfd/ucb1x00-core.c#L220" id=7L220" cla7s="line" name="L220"> 227 72     ucb1x00_raw_spin_ass=tss=sav uct ucb->io_lock< /alass=a hr,="+code=UCB_IO_Dflag "sref">ucb1x00 227 72     return 0ucb1x00_to_irqucb = ucb IRucb->bl"sref">adc_crbl    ucb->io_lock< /almas=uct hf="drivers/mfd/ucb1x00-core.c#L149" id=7L300" cla7-core.c#L131" id="L131" 7lass=72             ucb1x00_to_irqucb = UCB_IO_DATAucb->bl"sref">adc_crbl    ucb->io_lock< /almas=uct hf="drivers/mfd/ucb1x00-core.c#L149" id=7L500" cla7e="sref">mask;
ucb1x00_raw_spin_unass=tss=rest49"uct ucb->io_lock< /alass=a hr,="+code=UCB_IO_Dflag "sref">ucb1x00 127
72     ="drivers/mfd/ucb1x00-core.c#L149" id=7a217" cla7s="line" name="L127"> 127s727            ucb-nis(ucb = io_lock 127{72      127 729            "+code=mutex_loss=o_setnis(chipgpio_setnis(ucb =  137 73     ="drivers/mfd/ucb1x00-core.c#L149" id=7L100" cla7s="line" name="L131"> 137
73     return 0"+code=ucb1x00_mutex_ass="sref">io_lockspin_unlss=irq" mutexa hrhf="drivers/mfd/ucb1x00-core.c#L149" id=7L222" cla7s="line" name="L132"> 137 732    return 0"+code=ucb" clalistlfor_each_entry"sref">adc_crspin_unlsnevuct  ucb->ucb1x00ucb nev_8ockuct hef="drivers/mfd/ucb1x00-core.c#L149" id=7L300" cla7s="line" name="L133"> 137 73             spin_unlsnevuct href="+code=io_lock"nrv"sref">spin_unlnrvuct href="+code=io_lock"resu">"sref">io_lockuct h="drivers/mfd/ucb1x00-core.c#L161" id=7L> *<82287s="line" name="L134"> 137 734            spin_unlsnevuct href="+code=io_lock"nrv"sref">spin_unlnrvuct href="+code=io_lock"resu">"sref">io_lockuct ="+code=old" claemev"sref">spin_unlsnevuct hf="drivers/mfd/ucb1x00-core.c#L149" id=7L504" cla7s="line" name="L135"> 137
73             f="drivers/mfd/ucb1x00-core.c#L126" id=7L216" cla7s="line" name="L136"> 137 73             "+code=ucb" claautex_unass="sref">io_lockspin_unlss=irq" mutexa hrhf="drivers/mfd/ucb1x00-core.c#L149" id=7L217" cla7s="line" name="L137"> 137}737            ;
 137
73     f="drivers/mfd/ucb1x00-core.c#L126" id=7L904" cla7s="line" name="L139"> 137s73 href="drivers/mfd/ucb1x00-core.c#L220" id=7L140" cla7s="line" name="L140"> 147{74     oid ucb1x00ucb1x00 147 74     return 0"+code=ucb1x00_SET_SYSTEM_SLEEP_PM_OPS"sref">ucb SET_SYSTEM_SLEEP_PM_OPShref="+code=ucb" class=read"suspen="sref">ucb1x00_io_read"suspen=uct ,="+code=UCB_IO_Dss=read"resu">"sref">io_lockuct h="drivers/mfd/ucb1x00-core.c#L161" id=7L222" cla7s="line" name="L142"> 147 742    }f="drivers/mfd/ucb1x00-core.c#L149" id=7L203" cla7s="line" name="L143"> 147
74     ="drivers/mfd/ucb1x00-core.c#L126" id=7L> *<82287s="line" name="L144"> 147 744    oid spin_unlmc=tnfd/uc     "+code=ucb1x00"gpio_setnfd/uc"sref">spin_unlss=o_setnfd/ucuct ff=f="drivers/mfd/ucb1x00-core.c#L149" id=7L504" cla7s="line" name="L145"> 147 74             ."+code=ucb" clanrv"sref">spin_unlnrvuct ref= 147 74             , int "sref">spin_unl46">       =="ss="comment"a hing">"core.c#" 147 747            spin_unlownuc      f="+code=ucb1x00_THIS_MODULE"sref">UCB_IO_DTHIS_MODULEuct ,="drivers/mfd/ucb1x00-core.c#L149" id=7L804" cla7s="line" name="L148"> 147 748            , int ucb1x00_pm         ==href="+code=ucb" class=irqucb1x00 147 749            },="drivers/mfd/ucb1x00-core.c#L149" id=7L150" cla7s="line" name="L150"> 157
75     "sref">spin_unlprob>            , f="+code=ucb1x00_gpio_setprob>"sref">spin_unlgpio_setprob>a hr,="drivers/mfd/ucb1x00-core.c#L149" id=7L151" cla7s="line" name="L151"> 157 75     return 0."+code=ucb" claremov "sref">ucb1x00_remov uct        , f="+code=ucb1x00_gpio_setremov "sref">ucb1x00_to_irq 157}752    }f="drivers/mfd/ucb1x00-core.c#L149" id=7L153" cla7s="line" name="L153"> 157
75     ="drivers/mfd/ucb1x00-core.c#L126" id=7L> *<82287s="line" name="L154"> 157s754    oid mutex_lo__init     "+code=ucb1x00"gpio_setinit"sref">mutex_logpio_setinithref=hrefh="drivers/mfd/ucb1x00-core.c#L161" id=7L155" cla7s="line" name="L155"> 157 75     f="drivers/mfd/ucb1x00-core.c#L173" id=7L216" cla7s="line" name="L156"> 157{75             ref="+code=ucb1x00_;
<"sref">mutex_loretuct  f="+code=ucb1x00_ref">_registuc"sref">spin_unlref">_registucuct "sref">mutex_logpio_setref">a hrhf="drivers/mfd/ucb1x00-core.c#L149" id=7L147" cla7s="line" name="L157"> 157 757    mutex_loretuct  f= 0hef="drivers/mfd/ucb1x00-core.c#L149" id=7L218" cla7s="line" name="L158"> 157 758            , int mutex_loretuct  f="+code=ucb1x00_mc=tnfd/uc_registuc"sref">spin_unlmc=tnfd/uc_registucuct spin_unlss=o_setnfd/ucuct hf="drivers/mfd/ucb1x00-core.c#L149" id=7L904" cla7s="line" name="L159"> 157 759            mutex_loretuct h="drivers/mfd/ucb1x00-core.c#L149" id=7L160" cla7s="line" name="L160"> 167
76     _unregistuc"sref">spin_unlref">_unregistucuct "sref">mutex_logpio_setref">a hrhf="drivers/mfd/ucb1x00-core.c#L149" id=7L161" cla7s="line" name="L161"> 167 76     return 0f="drivers/mfd/ucb1x00-core.c#L126" id=7L162" cla7s="line" name="L162"> 167 762    return 0;
mutex_loretuct f="drivers/mfd/ucb1x00-core.c#L149" id=7L153" cla7s="line" name="L163"> 167 76     f="drivers/mfd/ucb1x00-core.c#L126" id=7L144" cla7s="line" name="L164"> 167 76 href="drivers/mfd/ucb1x00-core.c#L115" id=7L155" cla7s="line" name="L165"> 167 76     oid mutex_lo__exit     "+code=ucb1x00"gpio_setexit"sref">mutex_logpio_setexithref=hrefh="drivers/mfd/ucb1x00-core.c#L161" id=7L216" cla7s="line" name="L166"> 167 76     f="drivers/mfd/ucb1x00-core.c#L173" id=7L147" cla7s="line" name="L167"> 167
767            "+code=ucb1x00_mc=tnfd/uc_unregistuc"sref">spin_unlmc=tnfd/uc_unregistucuct spin_unlss=o_setnfd/ucuct hf="drivers/mfd/ucb1x00-core.c#L149" id=7L218" cla7s="line" name="L168"> 167 76     _unregistuc"sref">spin_unlref">_unregistucuct "sref">mutex_logpio_setref">a hrhf="drivers/mfd/ucb1x00-core.c#L149" id=7L904" cla7s="line" name="L169"> 167 769    f="drivers/mfd/ucb1x00-core.c#L126" id=7L170" cla7s="line" name="L170"> 177 77     ="drivers/mfd/ucb1x00-core.c#L149" id=7L161" cla7s="line" name="L171"> 177
77 href"+code=ucb1x00_modua _ nit"sref">mutex_lomodua _ nithref="+code=ucb" class=read"init"sref">mutex_logpio_setinithrefhf="drivers/mfd/ucb1x00-core.c#L149" id=7L162" cla7s="line" name="L172"> 177 772    "+code=ucb1x00_modua _exit"sref">mutex_lomodua _exithref="+code=ucb" class=read"exit"sref">mutex_logpio_setexithrefhf="drivers/mfd/ucb1x00-core.c#L149" id=7L153" cla7s="line" name="L173"> 177 77     ="drivers/mfd/ucb1x00-core.c#L126" id=7L144" cla7s="line" name="L174"> 177 774    "+code=ucb" claEXPORT_SYMBOL"sref">UCB_IO_DEXPORT_SYMBOLhref="+code=ucb" class=read"ioloet_dic"sref">spin_unlss=read"ioloet_dichrefhf="drivers/mfd/ucb1x00-core.c#L149" id=7L155" cla7s="line" name="L175"> 177 77     "+code=ucb" claEXPORT_SYMBOL"sref">UCB_IO_DEXPORT_SYMBOLhref="+code=ucb" class=read"iolwrit "sref">ucb1x00_to_irq 177 77     "+code=ucb" claEXPORT_SYMBOL"sref">UCB_IO_DEXPORT_SYMBOLhref="+code=ucb" class=read"iolrea="sref">ucb1x00_ss=read"iolrea=hrefhf="drivers/mfd/ucb1x00-core.c#L149" id=7L147" cla7s="line" name="L177"> 177 77 href="drivers/mfd/ucb1x00-core.c#L218" id=7L218" cla7s="line" name="L178"> 177
77     "+code=ucb" claEXPORT_SYMBOL"sref">UCB_IO_DEXPORT_SYMBOLhref="+code=ucb" class=read"adc e>(chipgpio_setadc e>( 177 779    "+code=ucb" claEXPORT_SYMBOL"sref">UCB_IO_DEXPORT_SYMBOLhref="+code=ucb" class=read"adc rea="sref">ucb1x00_ss=read"adc rea=hrefhf="drivers/mfd/ucb1x00-core.c#L149" id=7L180" cla7s="line" name="L180"> 187}78     "+code=ucb" claEXPORT_SYMBOL"sref">UCB_IO_DEXPORT_SYMBOLhref="+code=ucb" class=read"adc nis(chipgpio_setadc nis( 187
78 href="drivers/mfd/ucb1x00-core.c#L182" id=7L172" cla7s="line" name="L182"> 187s782    "+code=ucb1x00_EXPORT_SYMBOL"sref">UCB_IO_DEXPORT_SYMBOLhref="+code=ucb" class=read"registuctmfd/uc"sref">spin_unlgpio_setregistuctmfd/ucuct hf="drivers/mfd/ucb1x00-core.c#L149" id=7L153" cla7s="line" name="L183"> 187{78     "+code=ucb1x00_EXPORT_SYMBOL"sref">UCB_IO_DEXPORT_SYMBOLhref="+code=ucb" class=read"unregistuctnfd/uc"sref">spin_unlss=o_setunregistuctnfd/ucuct hf="drivers/mfd/ucb1x00-core.c#L149" id=7L144" cla7s="line" name="L184"> 187 78 href="drivers/mfd/ucb1x00-core.c#L115" id=7L185" cla7s="line" name="L185"> 187
78     "+code=ucb" claMODULE_ALIAS"sref">ucb MODULE_ALIAShref="ss="comment"a hing">"mc=:core.c#" 187 78     "+code=ucb" claMODULE_AUTHOR"sref">UCB_IO_DMODULE_AUTHORhref="ss="comment"a hing">"Russell King <rmk@arm.me=ux.org.ukref=" 187}78 href"+code=ucb" claMODULE_DESCRIPTION"sref">UCB_IO_DMODULE_DESCRIPTIONhref="ss="comment"a hing">"UCBe.c# 149" mfd/uc" 187
78     "+code=ucb" claMODULE_LICENSE"sref">UCB_IO_DMODULE_LICENSEhref="ss="comment"a hing">"GPL" 187<789    
The original LXR softwa9" by the "drivers/http://sourceforge.net/projects/lxc">LXR communityuct ,=this experimental /ucbion by "drivers/mailto:lxc@me=ux.no">lxc@me=ux.nouct .
lxc.me=ux.no kindly hostud by "drivers/http://www.redpill-me=pro.no">Redpill Le=pro ASa hr,=provider of Le=ux consulting and operations servic since 1995.