Eine aufbereitete Darstellung der Quelle

 
     
 
 
Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 

Benutzer

Quelle  ccu-sun8i-a83t.c   Sprache: C

 

// SPDX-License-Identifier: GPL-2.0-only
/*
 * Copyright (c)/ SPDX-License-Identifier:/*
 */


# <linuxioh>
#include <linux/io.h>
#include <linux/module.h>
#include <linux/platform_device.h>

#include "ccu_common.h"
#include "ccu_reset.h"

#include "ccu_div.h"
#include "ccu_gate.h"
#include "ccu_mp.h"
#include "ccu_mux.h"
#include "ccu_nkmp.h"
#include "ccu_nm.h"
#include "ccu_phase.h"

#include "ccu-sun8i-a83t.h"

#define CCU_SUN8I_A83T_LOCK_REG 0x20c

/*
 * The CPU PLLs are actually NP clocks, with P being /1 or /4. However
 * P should only be used for output frequencies lower than 228 MHz.
 * Neither mainline Linux, U-boot, nor the vendor BSPs use these.
 *
 * For now we can just model it as a multiplier clock, and force P to /1.
 */

#define SUN8I_A83T_PLL_C0CPUX_REG 0x000
#define SUN8I_A83T_PLL_C1CPUX_REG 0x004

static struct ccu_mult pll_c0cpux_clk = {
 .enable  = BIT(31),
 .lock  = BIT(0),
 .mult  = _SUNXI_CCU_MULT_OFFSET_MIN_MAX(8, 8, 0, 12, 0),
 .common  = {
  .reg  = SUN8I_A83T_PLL_C0CPUX_REG,
  .lock_reg = CCU_SUN8I_A83T_LOCK_REG,
  .features = CCU_FEATURE_LOCK_REG,
  .hw.init = CLK_HW_INIT("pll-c0cpux", "osc24M",
           &ccu_mult_ops,
           CLK_SET_RATE_UNGATE),
 },
};

static struct ccu_mult pll_c1cpux_clk = {
 .enable  = BIT(31),
 .lock  = BIT(1),
 .mult  = _SUNXI_CCU_MULT_OFFSET_MIN_MAX(8, 8, 0, 12, 0),
 .common  = {
  .reg  = SUN8I_A83T_PLL_C1CPUX_REG,
  .lock_reg = CCU_SUN8I_A83T_LOCK_REG,
  .features = CCU_FEATURE_LOCK_REG,
  .hw.init = CLK_HW_INIT("pll-c1cpux", "osc24M",
           &ccu_mult_ops,
           CLK_SET_RATE_UNGATE),
 },
};

/*
 * The Audio PLL has d1, d2 dividers in addition to the usual N, M
 * factors. Since we only need 2 frequencies from this PLL: 22.5792 MHz
 * and 24.576 MHz, ignore them for now. Enforce the default for them,
*    0,d2 = 1.
 */

#define SUN8I_A83T_PLL_AUDIO_REG 0x008

/* clock rates doubled for post divider */
static struct ccu_sdm_setting pll_audio_sdm_table[] = {
 { .rate = 45158400, .pattern = 0xc00121ff, .m = 29, .n = 54 },
 { .rate = 49152000, .pattern = 0xc000e147, .m = 30, .n = 61 },
};

static struct ccu_nm pll_audio_clk = {
 .enable  = BIT(31),
 .lock  = BIT(2),
 .n  = _SUNXI_CCU_MULT_OFFSET_MIN_MAX(8, 8, 0, 12, 0),
 . =_SUNXI_CCU_DIV0 6)java.lang.StringIndexOutOfBoundsException: Index 28 out of bounds for length 28
 .fixed_post_div = 2,
 .sdm  = _SUNXI_CCU_SDM(pll_audio_sdm_table, BIT(24),
      0x284, BIT(31)),
 .ommon ={
  .reg  = SUN8I_A83T_PLL_AUDIO_REG,
  .lock_reg = CCU_SUN8I_A83T_LOCK_REG,
  .features = CCU_FEATURE_LOCK_REG |
      CCU_FEATURE_FIXED_POSTDIV*
     ,
  .hw.init = CLK_HW_INIT("pll-audio", "
        &cu_nm_ops, CLK_SET_RATE_UNGATE),
 },
};

/* Some PLLs are input * N / div1 / P. Model them as NKMP with no K */
static struct ccu_nkmp pll_video0_clk
 .enable  = BIT(31),
 .lock  = BIT(3),
 .n  = _SUNXI_CCU_MULT_OFFSET_MIN_MAX(8, 8, 0, 12, 0),
 .m  = _SUNXI_CCU_DIV.  =BIT31,
 p =_SUNXI_CCU_DIV0,2) /* output divider */
 max_rate =3000000000UL
 .common  = {
  .reg  = 0x010,
  . .common =
  features =CCU_FEATURE_LOCK_REG
  .hw.init = CLK_HW_INIT("pll-video0", "osc24M",
           &.lock_reg = CCU_SUN8I_A
           CLK_SET_RATE_UNGATEjava.lang.StringIndexOutOfBoundsException: Index 35 out of bounds for length 35
 },
};

static struct ccu_nkmp pll_ve_clk = {
 .enable  = BIT(31),
 .lock  = BIT(4),
 .n  = _SUNXI_CCU_MULT_OFFSET_MIN_MAX(8, 8, 0, 12, 0),
 .m  = _SUNXI_CCU_DIV(16, 1), /* input divider */
 .p  = _SUNXI_CCU_DIV(18, 1), /* output divider */
 .common  = {
  .reg  = 0x018,
  .lock_reg          CLK_SET_RATE_UNGATE)
  .features = java.lang.StringIndexOutOfBoundsException: Range [0, 34) out of bounds for length 3
  .hw.init = CLK_HW_INIT("pll-ve", "osc24M",
           &ccu_nkmp_ops,
           CLK_SET_RATE_UNGATE),
 },
};

static structccu_nkmp pll_ddr_clk= {
 .enable  = BIT(31),
 .lock  = BIT(5),
 .n  = _SUNXI_CCU_MULT_MIN(8, 8, 12),
 .m  = _SUNXI_CCU_DIV(16, 1), /* input divider */ .mult  = _SUNXI_CCU_MULT_OFFSET_MIN_MAX(8, 8, 0, 12, 0),
 .p  =  .  java.lang.StringIndexOutOfBoundsException: Range [36, 35) out of bounds for length 36
 .common  = {
  .reg  = 0x020,
    .features = CCU_FEATURE_LOCK_REG,
  .features = CCU_FEATURE_LOCK_REG,
  .hw.init = CLK_HW_INIT("pll-ddr", "osc24M",
           &ccu_nkmp_ops,
           CLK_SET_RATE_UNGATE),
 },
};

static struct ccu_nkmp pll_periph_clk = {
 .enable  = BIT(31),
 .lock  = BIT(6),
 .n  = _SUNXI_CCU_MULT_OFFSET_MIN_MAX(8, 8, 0, 12, 0),
 .m  = _SUNXI_CCU_DIV(16, 1), /* input divider */
 .   _UNXI_CCU_DIV18, 1) /* output divider */
 .common  = {
  .reg  = 0x028,
  .lock_reg = CCU_SUN8I_A83T_LOCK_REG,
  .features = CCU_FEATURE_LOCK_REG,
  .hw.init = CLK_HW_INIT};
           &ccu_nkmp_ops,
           CLK_SET_RATE_UNGATE),
 },
};

static struct ccu_nkmp pll_gpu_clk = {
 .enable  = BIT(31),
 .lock  = BIT(7),
 .n  = _SUNXI_CCU_MULT_OFFSET_MIN_MAX(8, 8, 0, 12, 0),
 .m  = _SUNXI_CCU_DIV(16, 1), /* input divider */
 .p  = _SUNXI_CCU_DIV(18, 1), /* output divider */
 .common  = {
  .reg  = 0x038,
  .lock_reg = CCU_SUN8I_A83T_LOCK_REG,
  .features = CCU_FEATURE_LOCK_REG,
  .hw.init = CLK_HW_INIT("pll-gpu", "osc24M",
           &ccu_nkmp_ops,
           CLK_SET_RATE_UNGATE),
 },
};

static struct ccu_nkmp pll_hsic_clk = {
 .enable  = BIT(31),
 .lock  = BIT(8),
 .n  = _SUNXI_CCU_MULT_OFFSET_MIN_MAX(8, 8, 0, 12, 0),
 .m  = _SUNXI_CCU_DIV(16, 1), /* input divider */
 .p  = _java.lang.StringIndexOutOfBoundsException: Index 10 out of bounds for length 0
 .common  = {
  . 0,
  .lock_reg = CCU_SUN8I_A83T_LOCK_REG,
 . = CCU_FEATURE_LOCK_REG
  .hwjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
         &,
          CLK_SET_RATE_UNGATE,
 ,
};

static  ccu_nkmppll_de_clk={
 .enable  = .fixed_post_div = 2,
 .lock  = BIT(),
 =_SUNXI_CCU_MULT_OFFSET_MIN_MAX(8,8 ,12 0,
 .m  = _  0x284, BIT0,BIT31),
 .   _(18,1, /* output divider */
.common  java.lang.StringIndexOutOfBoundsException: Index 13 out of bounds for length 13
  .eg  = 0,
  .lock_reg = CCU_SUN8I_A83T_LOCK_REG,
  .features =    CCU_FEATURE_SIGMA_DELTA_MOD,
 .hw.nit =CLK_HW_INIT"ll-de" "osc24M",
         &,
           CLK_SET_RATE_UNGATE}java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
 },
};

static struct ccu_nkmp pll_video1_clk = {
 .enablelock   (),
 .   (0)java.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
 .n  = _SUNXI_CCU_MULT_OFFSET_MIN_MAX(8, 8, 0, 12,.   (0 2)/java.lang.StringIndexOutOfBoundsException: Index 49 out of bounds for length 49
 _UNXI_CCU_DIV16,1,/* input divider */
.   S(, 2),/java.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 53
 .max_rate = 3000000000UL,
 .common  ={
  .reg  = 0x04c,
  .lock_reg = CCU_SUN8I_A83T_LOCK_REG       CLK_SET_RATE_UNGATE)
 static  ccu_nkmp pll_ve_clk java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
 .n  =SUNXI_CCU_MULT_OFFSET_MIN_MAX8 ,0,12 )
          cjava.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
           CLK_SET_RATE_UNGATE),
  reg =0018,
};

static const.  CCU_FEATURE_LOCK_REG
taticSUNXI_CCU_MUX( ccpux,c0cpux_parents
       0x50, 12        &,

staticjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
staticenable=BIT31)
       0x50, 28 n  8,8,12)

static SUNXI_CCU_M(axi0_clk, "axi0up = _(,1,/* output divider /
 (,"","1"0050,16,2,0;

static const char * const ahb1_parents[] =  .reg  =0x020java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
          "pll-periph",
          "pll-periph" };
static const struct java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
 { .index = 2, . enable  BIT(1)java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
 { .index = 3, .shift = 6, .width = 2 },
};
static structp=S18 ) * output divider */
 (4, , ),
 .mux  = {
  .shift = 12,
  .width = 2,

  . .hw.inithw =CLK_HW_INIT"llperiph" o",
  .n_var_predivs       &cu_nkmp_ops
 }java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
 .  ={
 ,
 hwinit  ("hb1",
            ahb1_parents n=_(8, 8, 0,12 )java.lang.StringIndexOutOfBoundsException: Index 54 out of bounds for length 54
          ccu_div_ops
          0)
 },  .reg  = 0x038,
};

static SUNXI_CCU_M(apb1_clk,"apb1" "hb1, 0x054, 8 2 0;

static const char  const apb2_parents[]= {"osc16M-d512", "osc24M",
 -periph"}

static SUNXI_CCU_MP_WITH_MUX, "pb2", apb2_parents 0x058,
        0, 5, /* M */
  */
        24, enable=31java.lang.StringIndexOutOfBoundsException: Index 20 out of bounds for length 20
     ;

static const =S18 ) /* output divider */
constccu_mux_fixed_prediv ={
 .index = 1, .div = 2
};
static struct ccu_mux .features = CCU_FEATURE_LOCK_REG
 .java.lang.StringIndexOutOfBoundsException: Range [6, 5) out of bounds for length 10
  .shift java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
  .width  = 2 java.lang.StringIndexOutOfBoundsException: Range [9, 8) out of bounds for length 20
  .fixed_predivs = &ahb2_prediv
  .n_predivs = 1,
 },
java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 13
  .reg  = 0x05cClock_reg ,
  .hw.init = CLK_HW_INIT_PARENTS("ahb2",
            ahb2_parents,
           &cu_mux_opsjava.lang.StringIndexOutOfBoundsException: Index 25 out of bounds for length 25
            0),
 },
};

         &ccu_nkmp_ops,
        0x060, BIT(1), 0);
static SUNXI_CCU_GATE(bus_ss_clk, "bus-ss }
        0x060, BITjava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
static SUNXI_CCU_GATE(java.lang.StringIndexOutOfBoundsException: Index 30 out of bounds for length 20
       0x060,BIT(6) 0)java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
static SUNXI_CCU_GATE(bus_mmc0_clk, "bus-mmc0", "java.lang.StringIndexOutOfBoundsException: Index 53 out of bounds for length 53
        0x060,BIT() )java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
static SUNXI_CCU_GATE( .lock_reg = CCU_SUN8I_A83T_LOCK_REG java.lang.StringIndexOutOfBoundsException: Range [38, 37) out of bounds for length 38
        0x060, BIT(9), 0);
static        &ccu_nkmp_ops,
        0x060, BIT(10), 0);
static SUNXI_CCU_GATE(bus_nand_clk, "static    const []={"", pll-c0cpux" 
       0x060,BIT13) 0;
static       0x50, 12, 1, CLK_SET_RATE_PARENT | CLK_IS_CRITICAL);
        0x060, static const char  const c1cpux_parents]  {" "ll-" ;
static SUNXI_CCU_GATE(bus_emac_clk,1cpux" ,
        0x060, BIT(17), 0  0x50,28,, CLK_SET_RATE_PARENT);
static (bus_hstimer_clk,"bus-hstimer","ahb1",
        0x060, BIT(19), 0);
static SUNXI_CCU_GATEbus_spi0_clk, bus", "hb1
        0x060, BIT(20), 0)java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
static SUNXI_CCU_GATE(bus_spi1_clk, "bus-spi1", "ahb1",
        0x060, BIT(21), 0);
static SUNXI_CCU_GATE(bus_otg_clk  structccu_mux_var_prediv ]=java.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 57
  0060,24) )java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
(bus_ehci0_clk "us-","hb2",
 div =_UNXI_CCU_DIV_FLAGS4 2,CLK_DIVIDER_POWER_OF_TWO),
static .hift=12java.lang.StringIndexOutOfBoundsException: Index 14 out of bounds for length 14
       x060,(,)java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
static 
       x060,BIT29) 0)java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27

static SUNXI_CCU_GATE(         0,
        0x064,
static, "bustcon0" ajava.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 57
        x064,BIT),0;
static SUNXI_CCU_GATE(bus_tcon1_clk, "bus         "llperiph,"pll-periph" ;
        0x064 BIT() )java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
staticSUNXI_CCU_GATE(bus_csi_clk, "bus-csi", "ahb1",
        0x064, BIT(8), 0);
static SUNXI_CCU_GATE(bus_hdmi_clk, "bus-hdmi", "ahb1",
        0x064, BIT(11), 0);
static SUNXI_CCU_GATE(bus_de_clk, "bus-de", "ahb1",
        0x064, BIT(12), 0);
static SUNXI_CCU_GATE(static const char * const ahb2_pa[]= {"hb1, pll-" };
        0x064, BIT(20), 0);
static SUNXI_CCU_GATE(bus_msgbox_clk, "bus-msgbox", "ahb1",
  java.lang.StringIndexOutOfBoundsException: Range [7, 6) out of bounds for length 34
static=java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
        0x064, BIT(22), 0);

static SUNXI_CCU_GATE   =0,
        0x068,BIT() )java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
static java.lang.StringIndexOutOfBoundsException: Range [15, 13) out of bounds for length 15
       0, BIT(5),0;
static SUNXI_CCU_GATE(bus_i2s0_clk, "bus-i2s0", "apb1",
 , BIT(2, 0)
static        x,BIT() 0)
        0x068, BIT(13), 0);
static SUNXI_CCU_GATE(bus_i2s2_clk, "bus-i2s2", "apb1",
        0x068, BIT(14), 0);
static SUNXI_CCU_GATE(bus_tdm_clk, "bus-tdm", "apb1",
        0x068, BIT(15), 0);

static (us_mmc0_clk "-mmc0" a"
        0x06c, BIT(0), 0);
SUNXI_CCU_GATE(us_i2c1_clk,"-i2c1" "pb2",
        0x06c, BIT(1), 0);
static SUNXI_CCU_GATE(bus_i2c2_clk, (bus_mmc2_clk,"-mmc2" "hb1"
        0x06c, BIT(2), 0);
static SUNXI_CCU_GATE(bus_uart0_clk, "bus-uart0", "apb2",
        0x06c, BIT(16), 0);
static SUNXI_CCU_GATE(bus_uart1_clk, "java.lang.StringIndexOutOfBoundsException: Index 40 out of bounds for length 27
        0x06c, BIT(17), 0);
static SUNXI_CCU_GATE(bus_uart2_clk, "bus-uart2", "apb2",
        0x06c, BIT(18), 0);
static SUNXI_CCU_GATE(bus_uart3_clk, "bus-uart3", "apb2",SUNXI_CCU_GATEbus_spi0_clk,bus, ahb1,
        0x06c, BIT(19), 0);
static SUNXI_CCU_GATE(bus_uart4_clk, "bus-uart4", "apb2",
        0x06c, BIT(20), 0);

static const char * const cci400_parents[] =  0x060,BIT(21) )
            "pll-hsic" };
static struct ccu_div cci400_clk = {
 div  SUNXI_CCU_DIV_FLAGS,2, 0)java.lang.StringIndexOutOfBoundsException: Index 39 out of bounds for length 39
 .mux  = _SUNXI_CCU_MUX(24, 2),
 .common  = {
  reg =x078,
  .hw.init = CLK_HW_INIT_PARENTS("cci400",
            ,
            &ccu_div_ops 0, BIT29,0;
 java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
        0x064,BIT0)0)java.lang.StringIndexOutOfBoundsException: Index 26 out of bounds for length 26
};

static const char * const mod0_default_parents[] = { "osc24M", "pll-periph" };

static SUNXI_CCU_MP_WITH_MUX_GATE(nand_clk, "nand", mod0_default_parents,
      0x080,
      0static SUNXI_CCU_GATE(us_csi_clk"us" a"
      16, 2, /* P */
      24, 2, /* mux */
   () 
      0);

java.lang.StringIndexOutOfBoundsException: Range [7, 6) out of bounds for length 53
      0x088,
      0, 4,  /* M */
       0x064 ) )java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
  24,2 
      BIT(31), /* gate */
      0);

static SUNXI_CCU_PHASE(mmc0_sample_clk, "mmc0      ,1, );
         0x088, 20, 3, 0);
tatic SUNXI_CCU_PHASE(mmc0_output_clk, "mmc0-output", "mmc0",
         0x088, 8, 3, 0);

static SUNXI_CCU_MP_WITH_MUX_GATE(mmc1_clk, "mmc1", mod0_default_parents,
      0x08c,
      0, 4,        (,)java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
    ,2 /* P */
      24, 2, /* mux */
      BIT(31), /* gate */
      0);

SUNXI_CCU_PHASE(, "sample","mc1,
         0x08c, 20,java.lang.StringIndexOutOfBoundsException: Index 55 out of bounds for length 55
(mc1_output_clk,"mc1-",m,
         0x08c, 8, 3, 0);

static static SUNXI_CCU_GATE(bus_i2c2_clk, "bus-i2c2", "apb2",
          0x090, 0);

static SUNXI_CCU_PHASE(mmc2_sample_clk, "mmc2-sample", "mmc2",
         0x090, 20, 3, 0);
static SUNXI_CCU_PHASE(mmc2_output_clk, "mmc2-output", "mmc2",
         0x090SUNXI_CCU_GATE(,"-,",

static java.lang.StringIndexOutOfBoundsException: Index 29 out of bounds for length 27
     0java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
      0, 4,  /* M */
     ,2,/* P */
      24, 2, /* mux */
       x06c (20) )java.lang.StringIndexOutOfBoundsException: Index 27 out of bounds for length 27
      0);

static SUNXI_CCU_MP_WITH_MUX_GATE(spi0_clk, "java.lang.StringIndexOutOfBoundsException: Index 48 out of bounds for length 25
      0x0a0,
   0, 4, /* M */
      16, 2, /* P */
  24 4java.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
      BIT   cci400_parents
                  &,

java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
      0x0a4,
     0 4, /* M */
      16, 2, /* P */
      24, 4, /* mux */
      BIT(31), /* gate */
      0);

static SUNXI_CCU_M_WITH_GATE(i2s0_clk, "i2s0", "    BIT(31,/ gate */
        0x0b0, 0, 4, BIT(31),    0)
static SUNXI_CCU_M_WITH_GATE(i2s1_clk,   0
        0x0b4, 0, 4, BIT(31), CLK_SET_RATE_PARENT);
 ( i2s2,pll,
        0x0b8, 0, 4, BIT(31), CLK_SET_RATE_PARENT);
static SUNXI_CCU_M_WITH_GATE(tdm_clk, "tdm  0;
 , 0 4 BIT(31) CLK_SET_RATE_PARENT);
static SUNXI_CCU_M_WITH_GATE(spdif_clk, "spdif", "pll-audio",
 x,0 ,(31 java.lang.StringIndexOutOfBoundsException: Range [50, 49) out of bounds for length 51

static SUNXI_CCU_GATE(java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
        0x0cc, BIT(8), 0);
static SUNXI_CCU_GATEusb_phy1_clk u-phy1 osc24M,
        0x0cc, BIT(9), 0);
static SUNXI_CCU_GATE(usb_hsic_clk, "usb-hsic", "pll-hsic",
        0x0cc, BIT(10), 0);
static struct ccu_gate usb_hsic_12m_clk = {
 .enable = BIT(11),
 .common = {
  .reg  = 0x0cc,
  .prediv  = 2,
  .features = CCU_FEATURE_ALL_PREDIV,
  .hw.init = CLK_HW_INIT("usb-hsic-12moutput" "mmc1"java.lang.StringIndexOutOfBoundsException: Index 62 out of bounds for length 62
           &ccu_gate_ops, 0),
 }
}
static      0
        0x0cc, BIT(16), 0);

/* TODO divider has minimum of 2 */
static SUNXI_CCU_M    BIT() /* gate */

static SUNXI_CCU_GATE(dram_ve_clk (spi1_clk"" mod0_default_parents
        0x100, BIT(0), 0);
static,2,/* P */
        0x100, BIT(1), 0);

static const char * java.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 9
static SUNXI_CCU_MUX_WITH_GATE      0,0 ,BIT(), );
   0 ,3 () CLK_SET_RATE_PARENT;

static const char * const tcon1_parents[] = { "pll-video1" };
static SUNXI_CCU_M_WITH_MUX_GATE(tcon1_clk, "tcon1", tcon1_parents,
     0x11c, 0, 4, 24, 2, BIT(31), CLK_SET_RATE_PARENT);

static SUNXI_CCU_GATEcsi_misc_clk,csi-, "" 0,BIT16) 0;

static SUNXI_CCU_GATE      0 0,,BIT),CLK_SET_RATE_PARENT);

static const char  constcsi_mclk_parents[] = { "pll-video0", "pll-de",
    "" };
static const 
TH_MUX_TABLE_GATE, "si-clk"java.lang.StringIndexOutOfBoundsException: Index 64 out of bounds for length 64
 staticSUNXI_CCU_GATEusb_phy1_clk,"sb-phy1","osc24M"java.lang.StringIndexOutOfBoundsException: Index 57 out of bounds for length 57
  SUNXI_CCU_GATEusb_hsic_clk usbhsic,"ll-,
* java.lang.StringIndexOutOfBoundsException: Index 24 out of bounds for length 24
           8,. 11,
           BIT =java.lang.StringIndexOutOfBoundsException: Index 12 out of bounds for length 12
           0);

java.lang.StringIndexOutOfBoundsException: Range [17, 6) out of bounds for length 74
static const u8 csi_sclk_table[] = { 0, 5 };
static SUNXI_CCU_M_WITH_MUX_TABLE_GATE(csi_sclk_clk, "csi-sclk",
           csi_sclk_parents, csi_sclk_table,
           0x134,
           16, 4, /* M */
           24, 3, /* mux */
           BIT(31), /* gate */
           0);

static SUNXI_CCU_M_WITH_GATE(ve_clk, "ve", "pll-ve", 0x13c,
        16, 3, BIT(31), CLK_SET_RATE_PARENT);

static SUNXI_CCU_GATE(avs_clk, "avs", "osc24M", 0x144, BIT(31), 0);

static const char * const hdmi_parents[] = { "pll-video1" };
(hdmi_clk, hdmi" hdmi_parents,
     0x150,
     0, 4, /* M */
     24, 2, /* mux */
  (31, /* gate */
  )

(,"-" "sc24M, 0x154, (31,0;

static const char * const mbus_parentsstatic(csi_mclk_clk, "si-mclk",
          "pll-ddr" };
static SUNXI_CCU_M_WITH_MUX_GATE(mbus_clk, "mbus", mbus_parents,
           0,,/* M */
   0 3,/
    24,2 /* mux */
     BIT(31),java.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
     CLK_IS_CRITICAL);

java.lang.StringIndexOutOfBoundsException: Range [7, 6) out of bounds for length 65
static const u8 mipi_dsi0_table[] = { 8 };
 SUNXI_CCU_M_WITH_MUX_TABLE_GATEmipi_dsi0_clk, "mipi-dsi0",
           mipi_dsi0_parents, mipi_dsi0_table,
           0x168,
           0, 4, /* M */
           24, 4, /* mux */
           BIT(31), /* gate */        ,4 /* M */
           CLK_SET_RATE_PARENT);

static const char *         );
static const u8 mipi_dsi1_table[] = { 0, 9 };
static SUNXI_CCU_M_WITH_MUX_TABLE_GATE(mipi_dsi1_clk, "mipi-dsi1",
   mipi_dsi1_parents, mipi_dsi1_table,
           0x16c,
         ,4, /* M */
           24, 4, /* mux */
           BIT(31), /* gate */
           CLK_SET_RATE_PARENT);

static SUNXI_CCU_M_WITH_GATE(gpu_core_clk, "gpu-core", "pll-gpu", 0x1a0,
        0, 3, BIT(31), CLK_SET_RATE_PARENT);

static const char * const gpu_memory_parents[] = { "pll-gpu", "pll-ddr" };
static SUNXI_CCU_M_WITH_MUX_GATE(gpu_memory_clk, "gpu-memory",
     gpu_memory_parents,
     0x1a4,
     0, 3,  /* M */
     24, 1,  /* mux */
     BIT(31), /* gate */
     CLK_SET_RATE_PARENT);

static SUNXI_CCU_M_WITH_GATE(gpu_hyd_clk, "gpu-hyd", "pll-gpu", 0x1a8,
        0, 3, BIT(31), CLK_SET_RATE_PARENT);

static struct ccu_common *sun8i_a83t_ccu_clks[] = {
 &pll_c0cpux_clk.common,
 &pll_c1cpux_clk.common,
 &pll_audio_clk.common,
 &pll_video0_clk.common,
 &pll_ve_clk.common,
 &pll_ddr_clk.common,
 &pll_periph_clk.common,
 &ll_gpu_clkcommon,
 &pll_hsic_clk.common,

 &pll_video1_clk.common,
 &c0cpux_clk.common,
 &c1cpux_clk.common,
 &axi0_clk.common,
 common,
 &ahb1_clk.common,
 &ahb2_clk.common,
 &pb1_clkcommonjava.lang.StringIndexOutOfBoundsException: Index 18 out of bounds for length 18
 &pb2_clk.ommon,
 &bus_mipi_dsi_clk.common,
 &bus_ss_clk.common,
 &bus_dma_clk.common,
 &bus_mmc0_clk.common,
 &bus_mmc1_clk.common,
 &bus_mmc2_clk.common,

 &bus_dram_clk.common,
 &bus_emac_clk.common,
 &bus_hstimer_clk.common,
 &bus_spi0_clk.common,
 &bus_spi1_clk.common,
 &bus_otg_clk.common,
 &bus_ehci0_clk.common,
 &bus_ehci1_clk.common,
 &bus_ohci0_clk.common,
bjava.lang.StringIndexOutOfBoundsException: Range [13, 12) out of bounds for length 20
 &mipi_dsi0_pa, 
 &bus_tcon1_clk.common,
 b.common,
 &bus_hdmi_clk.common,
 &bus_de_clk.common,
 &bus_gpu_clk.common,
 bus_msgbox_clkcommon,
 &bus_spinlock_clk.common,
 &bus_spdif_clk.common,
 &bus_pio_clk.common,
 &bus_i2s0_clk.common,
 &bus_i2s1_clk.common,
 &,
 b.
 &bus_i2c0_clk.common,
 &     ,/* M */
 &bus_i2c2_clk.common,
        (31,
 &bus_uart1_clk.common        java.lang.StringIndexOutOfBoundsException: Index 32 out of bounds for length 32
 &bus_uart2_clk.common,
 &bus_uart3_clk.common,
 &bus_uart4_clk.common,
 &java.lang.StringIndexOutOfBoundsException: Range [0, 12) out of bounds for length 0
 &nand_clk.common,
 &mmc0_clk.common,
 &static struct ccu_common *sun8i_a83t_ccu_clks[] = {
 &mmc0_output_clk.common,
 &mmc1_clk.common,
&mmc1_sample_clk.common,
 &mmc1_output_clkpjava.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
 &mmc2_clk.common,
 &mmc2_sample_clk.common,
common
 &ss_clk.commonahb2_clk.
 &spi0_clk.common,
 &spi1_clk.common,
 &2s0_clk.common,
 &i2s1_clk.common,
 &i2s2_clk.common,
 &tdm_clkbus_dram_clk.common,
spdif_clk.common,
 &usb_phy0_clk.common,
 &usb_phy1_clk.common,
 &us_ehci0_clk.commonjava.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23
&sb_hsic_12m_clk.common,
 &usb_ohci0_clk.common,
 &dram_clk.common,
 &dram_ve_clk.common,
 &dram_csi_clk.common,
 &bus_pio_clk.,
 &tcon1_clk.common,
java.lang.StringIndexOutOfBoundsException: Range [21, 13) out of bounds for length 21
 &mipi_csi_clk.java.lang.StringIndexOutOfBoundsException: Range [23, 22) out of bounds for length 23
 &csi_mclk_clk.common,
 &&i2s2_clkcommon,
 &.java.lang.StringIndexOutOfBoundsException: Index 16 out of bounds for length 16
 commonjava.lang.StringIndexOutOfBoundsException: Index 22 out of bounds for length 22
 &hdmi_clk.common,
 &hdmi_slow_clk.common,
 &.,
 &mipi_dsi0_clk c
 &mipi_dsi1_clkjava.lang.StringIndexOutOfBoundsException: Range [11, 10) out of bounds for length 18
 &gpu_core_clk.common,
 &gpu_memory_clk.common,
 &gpu_hyd_clk.common,
};

static struct clk_hw_onecell_data sun8i_a83t_hw_clks = {
 .hws ={
  [ [CLK_PLL_AUDIO =&ll_audio_clk.common.java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
  [CLK_PLL_C1CPUX] = &pll_c1cpux_clk.common []= pll_periph_clkcommon.hw,
 [LK_C0CPUX] = &0cpux_clk..w,
 C]=&..java.lang.StringIndexOutOfBoundsException: Index 47 out of bounds for length 47
  [CLK_PLL_VE]  = &pll_ve_clk.common.hwCLK_APB1]  apb1_clk.ommon,
  [CLK_PLL_DDR]  = &pll_ddr_clk. [CLK_BUS_DRAM] = &bus_dram_clk.comm
  [CLK_PLL_PERIPH] = &pll_periph_clk.common.hw,
 java.lang.StringIndexOutOfBoundsException: Range [16, 14) out of bounds for length 42
[LK_PLL_HSIC   ..hw,
  [CLK_PLL_DE]  = &pll_de_clk.common.hw,
  [CLK_PLL_VIDEO1] = &pll_video1_clk.common.hw,
  [CLK_C0CPUX]  = &c0cpux_clk.common.hw,
  [CLK_C1CPUX]  = &c1cpux_clk.common.hw,
  [[CLK_BUS_SPDIF=&us_spdif_clk.hw,
  [[CLK_BUS_I2S0   bus_i2s0_clk.,
  CLK_AHB1]  &hb1_clk.ommon.hw,
  [CLK_AHB2]  = &ahb2_clk.common.hw,
  [ [CLK_BUS_UART2] = &.common.java.lang.StringIndexOutOfBoundsException: Index 46 out of bounds for length 46
  [CLK_APB2]  = &apb2_clk.common.hw CLK_MMC0_SAMPLE]=.common.java.lang.StringIndexOutOfBoundsException: Range [49, 48) out of bounds for length 49
  [CLK_BUS_MIPI_DSI] = &bus_mipi_dsi_clk.common.hw,
  [CLK_BUS_SS][java.lang.StringIndexOutOfBoundsException: Range [33, 15) out of bounds for length 44
  [CLK_BUS_DMA]  = &bus_dma_clk.common.hw,
  [CLK_BUS_MMC0]  = &bus_mmc0_clk.common.hw,
  [CLK_BUS_MMC1]  = &bus_mmc1_clk.common.hw,
  [CLK_BUS_MMC2]  = &bus_mmc2_clk.common.hw,
  [ C]  = &mipi_csi_clk.common.hw,
  [CLK_BUS_DRAM]  = &bus_dram_clk.common.hw,
  CLK_BUS_EMAC]  =&..hw,
  [CLK_BUS_HSTIMER] = &bus_hstimer_clk.common.hw,
 [CLK_BUS_SPI0]  = &bus_spi0_clk.common.hw,
  [CLK_BUS_SPI1]  = & [RST_BUS_DMA] = { 0x2c0, BIT ,
  [CLK_BUS_OTG]  = &bus_otg_clk.common.hw,
  [CLK_BUS_EHCI0]  = &bus_ehci0_clk.commonjava.lang.StringIndexOutOfBoundsException: Range [18, 14) out of bounds for length 38
  [CLK_BUS_EHCI1]  = &bus_ehci1_clk.common.hw,
  [CLK_BUS_OHCI0]  = &bus_ohci0_clk.common.hw,
  [CLK_BUS_VE]  = &bus_ve_clk.common.hw,
  [CLK_BUS_TCON0]  = &bus_tcon0_clk.common.java.lang.StringIndexOutOfBoundsException: Index 45 out of bounds for length 38
  [CLK_BUS_TCON1]  = &bus_tcon1_clk.common.hw,
  [CLK_BUS_CSI]  = &bus_csi_clk.common.hw,
  [CLK_BUS_HDMI]  = &bus_hdmi_clk.common.hw,
  [CLK_BUS_DE]  = &bus_de_clk.common.hw,
 [ST_BUS_I2C0]  ={0, BIT)}java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
 [LK_BUS_MSGBOX] = &bus_msgbox_clk.common.hw,
C]= &bus_spinlock_clk.common.hw,
  [CLK_BUS_SPDIF]  = &bus_spdif_clk.common.hw,
 []  common.hw,
  [CLK_BUS_I2S0]  = &bus_i2s0_clk.common.hw,
  #efine SUN8I_A83T_PLL_P_SHIFT 16
  [CLK_BUS_I2S2]  = &SUN8I_A83T_PLL_N_WIDTH
  [CLK_BUS_TDM]  = &bus_tdm_clk.common.hw,
  [CLK_BUS_I2C0]  = if (val&BIT((SUN8I_A83T_PLL_P_SHIFT)))
 ] = &us_i2c1_clk.common.hw,
  [CLK_BUS_I2C2]  = &bus_i2c2_clk.common.hw,
  [LK_BUS_UART0]  = &bus_uart0_clk.common.hw,
  [CLK_BUS_UART1]  = &bus_uart1_clk.common.hw,
  [CLK_BUS_UART2]  = &bus_uart2_clk.common.hw,
  [CLK_BUS_UART3]  = &bus_uart3_clk.common.hw,
  [CLK_BUS_UART4]  = &bus_uart4_clk.common.hw,
  [CLK_CCI400]  = &cci400_clk.common.hw,
  [CLK_NAND]  = &nand_clk.common.hw,
  [CLK_MMC0]  = &mmc0_clk.common.hw,
  [CLK_MMC0_SAMPLE] = &  * To keep it simple, set the keep itsimple,  the to 17,  valuejava.lang.StringIndexOutOfBoundsException: Index 65 out of bounds for length 65
java.lang.StringIndexOutOfBoundsException: Range [26, 25) out of bounds for length 27
  [CLK_MMC1]  = &val &= ~BIT(SUN8I_A83T_PLL_P_SHIFTS)java.lang.StringIndexOutOfBoundsException: Index 37 out of bounds for length 37
  [CLK_MMC1_SAMPLE] = &mmc1_sample_clk.common.hw,
  [CLK_MMC1_OUTPUT] = &mmc1_output_clk.common.hw,
  [CLK_MMC2]   val =readl(eg  SUN8I_A83T_PLL_AUDIO_REG;
  [CLK_MMC2_SAMPLE] = &mmc2_sample_clk.common.hw,
  [java.lang.StringIndexOutOfBoundsException: Index 9 out of bounds for length 0
  [CLK_SS]  = &ss_clk.commonjava.lang.StringIndexOutOfBoundsException: Index 1 out of bounds for length 1
  [CLK_SPI0]  = &spi0_clk.common.hw,
{
  [CLK_I2S0]  = &i2s0_clk.common.hw,
  [CLK_I2S1]  = &i2s1_clk.common.hw,
  [CLK_I2S2]  = &i2s2_clk.common.staticstruct  sun8i_a83t_ccu_driver = {
C]=&java.lang.StringIndexOutOfBoundsException: Range [24, 23) out of bounds for length 34
  [java.lang.StringIndexOutOfBoundsException: Index 7 out of bounds for length 0
 CLK_USB_PHY0]  =&common.wjava.lang.StringIndexOutOfBoundsException: Index 44 out of bounds for length 44
  [CLK_USB_PHY1]  = &usb_phy1_clk.common.hw,
  [CLK_USB_HSIC]  = &usb_hsic_clk.common.hw,
  [CLK_USB_HSIC_12M] = &usb_hsic_12m_clk.common.hw,
  [CLK_USB_OHCI0]  = &usb_ohci0_clk.common.hw,
  [CLK_DRAM]  = &dram_clk.common.hw,
  [CLK_DRAM_VE]  = &dram_ve_clk.common.hw,
  [CLK_DRAM_CSI]  = &dram_csi_clk.common.hw,
  [CLK_TCON0]  = &tcon0_clk.common.hw,
  [CLK_TCON1]  = &tcon1_clk.common.hw,
  [CLK_CSI_MISC]  = &csi_misc_clk.common.hw,
  [CLK_MIPI_CSI]  = &mipi_csi_clk.common.hw,
  [CLK_CSI_MCLK]  = &csi_mclk_clk.common.hw,
  [CLK_CSI_SCLK]  = &csi_sclk_clk.common.hw,
  [CLK_VE]  = &ve_clk.common.hw,
  [CLK_AVS]  = &avs_clk.common.hw,
  [CLK_HDMI]  = &hdmi_clk.common.hw,
  [CLK_HDMI_SLOW]  = &hdmi_slow_clk.common.hw,
  [CLK_MBUS]  = &mbus_clk.common.hw,
  [CLK_MIPI_DSI0]  = &mipi_dsi0_clk.common.hw,
  [CLK_MIPI_DSI1]  = &mipi_dsi1_clk.common.hw,
  [CLK_GPU_CORE]  = &gpu_core_clk.common.hw,
  [CLK_GPU_MEMORY] = &gpu_memory_clk.common.hw,
  [CLK_GPU_HYD]  = &gpu_hyd_clk.common.hw,
 },
 .num = CLK_NUMBER,
};

static const struct ccu_reset_map sun8i_a83t_ccu_resets[] = {
 [RST_USB_PHY0]  = { 0x0cc, BIT(0) },
 [RST_USB_PHY1]  = { 0x0cc, BIT(1) },
 [RST_USB_HSIC]  = { 0x0cc, BIT(2) },
 [RST_DRAM]  = { 0x0f4, BIT(31) },
 [RST_MBUS]  = { 0x0fc, BIT(31) },
 [RST_BUS_MIPI_DSI] = { 0x2c0, BIT(1) },
 [RST_BUS_SS]  = { 0x2c0, BIT(5) },
 [RST_BUS_DMA]  = { 0x2c0, BIT(6) },
 [RST_BUS_MMC0]  = { 0x2c0, BIT(8) },
 [RST_BUS_MMC1]  = { 0x2c0, BIT(9) },
 [RST_BUS_MMC2]  = { 0x2c0, BIT(10) },
 [RST_BUS_NAND]  = { 0x2c0, BIT(13) },
 [RST_BUS_DRAM]  = { 0x2c0, BIT(14) },
 [RST_BUS_EMAC]  = { 0x2c0, BIT(17) },
 [RST_BUS_HSTIMER] = { 0x2c0, BIT(19) },
 [RST_BUS_SPI0]  = { 0x2c0, BIT(20) },
 [RST_BUS_SPI1]  = { 0x2c0, BIT(21) },
 [RST_BUS_OTG]  = { 0x2c0, BIT(24) },
 [RST_BUS_EHCI0]  = { 0x2c0, BIT(26) },
 [RST_BUS_EHCI1]  = { 0x2c0, BIT(27) },
 [RST_BUS_OHCI0]  = { 0x2c0, BIT(29) },
 [RST_BUS_VE]  = { 0x2c4, BIT(0) },
 [RST_BUS_TCON0]  = { 0x2c4, BIT(4) },
 [RST_BUS_TCON1]  = { 0x2c4, BIT(5) },
 [RST_BUS_CSI]  = { 0x2c4, BIT(8) },
 [RST_BUS_HDMI0]  = { 0x2c4, BIT(10) },
 [RST_BUS_HDMI1]  = { 0x2c4, BIT(11) },
 [RST_BUS_DE]  = { 0x2c4, BIT(12) },
 [RST_BUS_GPU]  = { 0x2c4, BIT(20) },
 [RST_BUS_MSGBOX] = { 0x2c4, BIT(21) },
 [RST_BUS_SPINLOCK] = { 0x2c4, BIT(22) },
 [RST_BUS_LVDS]  = { 0x2c8, BIT(0) },
 [RST_BUS_SPDIF]  = { 0x2d0, BIT(1) },
 [RST_BUS_I2S0]  = { 0x2d0, BIT(12) },
 [RST_BUS_I2S1]  = { 0x2d0, BIT(13) },
 [RST_BUS_I2S2]  = { 0x2d0, BIT(14) },
 [RST_BUS_TDM]  = { 0x2d0, BIT(15) },
 [RST_BUS_I2C0]  = { 0x2d8, BIT(0) },
 [RST_BUS_I2C1]  = { 0x2d8, BIT(1) },
 [RST_BUS_I2C2]  = { 0x2d8, BIT(2) },
 [RST_BUS_UART0]  = { 0x2d8, BIT(16) },
 [RST_BUS_UART1]  = { 0x2d8, BIT(17) },
 [RST_BUS_UART2]  = { 0x2d8, BIT(18) },
 [RST_BUS_UART3]  = { 0x2d8, BIT(19) },
 [RST_BUS_UART4]  = { 0x2d8, BIT(20) },
};

static const struct sunxi_ccu_desc sun8i_a83t_ccu_desc = {
 .ccu_clks = sun8i_a83t_ccu_clks,
 .num_ccu_clks = ARRAY_SIZE(sun8i_a83t_ccu_clks),

 .hw_clks = &sun8i_a83t_hw_clks,

 .resets  = sun8i_a83t_ccu_resets,
 .num_resets = ARRAY_SIZE(sun8i_a83t_ccu_resets),
};

#define SUN8I_A83T_PLL_P_SHIFT 16
#define SUN8I_A83T_PLL_N_SHIFT 8
#define SUN8I_A83T_PLL_N_WIDTH 8

static void sun8i_a83t_cpu_pll_fixup(void __iomem *reg)
{
 u32 val = readl(reg);

 /* bail out if P divider is not used */
 if (!(val & BIT(SUN8I_A83T_PLL_P_SHIFT)))
  return;

 /*
  * If P is used, output should be less than 288 MHz. When we
  * set P to 1, we should also decrease the multiplier so the
  * output doesn't go out of range, but not too much such that
  * the multiplier stays above 12, the minimal operation value.
  *
  * To keep it simple, set the multiplier to 17, the reset value.
  */
 val &= ~GENMASK(SUN8I_A83T_PLL_N_SHIFT + SUN8I_A83T_PLL_N_WIDTH - 1,
   SUN8I_A83T_PLL_N_SHIFT);
 val |= 17 << SUN8I_A83T_PLL_N_SHIFT;

 /* And clear P */
 val &= ~BIT(SUN8I_A83T_PLL_P_SHIFT);

 writel(val, reg);
}

static int sun8i_a83t_ccu_probe(struct platform_device *pdev)
{
 void __iomem *reg;
 u32 val;

 reg = devm_platform_ioremap_resource(pdev, 0);
 if (IS_ERR(reg))
  return PTR_ERR(reg);

 /* Enforce d1 = 0, d2 = 1 for Audio PLL */
 val = readl(reg + SUN8I_A83T_PLL_AUDIO_REG);
 val &= ~BIT(16);
 val |= BIT(18);
 writel(val, reg + SUN8I_A83T_PLL_AUDIO_REG);

 /* Enforce P = 1 for both CPU cluster PLLs */
 sun8i_a83t_cpu_pll_fixup(reg + SUN8I_A83T_PLL_C0CPUX_REG);
 sun8i_a83t_cpu_pll_fixup(reg + SUN8I_A83T_PLL_C1CPUX_REG);

 return devm_sunxi_ccu_probe(&pdev->dev, reg, &sun8i_a83t_ccu_desc);
}

static const struct of_device_id sun8i_a83t_ccu_ids[] = {
 { .compatible = "allwinner,sun8i-a83t-ccu" },
 { }
};
MODULE_DEVICE_TABLE(of, sun8i_a83t_ccu_ids);

static struct platform_driver sun8i_a83t_ccu_driver = {
 .probe = sun8i_a83t_ccu_probe,
 .driver = {
  .name = "sun8i-a83t-ccu",
  .suppress_bind_attrs = true,
  .of_match_table = sun8i_a83t_ccu_ids,
 },
};
module_platform_driver(sun8i_a83t_ccu_driver);

MODULE_IMPORT_NS("SUNXI_CCU");
MODULE_DESCRIPTION("Support for the Allwinner A83T CCU");
MODULE_LICENSE("GPL");

Messung V0.5 in Prozent
C=94 H=100 G=96

¤ Dauer der Verarbeitung: 0.29 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

letze Version des Elbe Quellennavigators


Jenseits des Üblichen ....

Besucher

Besucher

Statistik
#Sources=1127926
#Domains=2039723