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


Quelle  clk-versatile.c   Sprache: C

 
// SPDX-License-Identifier: GPL-2.0-only
/*
 * Clock driver for the ARM Integrator/AP, Integrator/CP, Versatile AB and
 * Versatile PB boards.
 * Copyright (C) 2012 Linus Walleij
 */

#include <linux/clk-provider.h>
#include <linux/err.h>
#include <linux/of.h>
#include <linux/of_address.h>

#include "icst.h"
#include "clk-icst.h"

#define INTEGRATOR_HDR_LOCK_OFFSET 0x14

#define VERSATILE_SYS_OSCCLCD_OFFSET 0x1c
#define VERSATILE_SYS_LOCK_OFFSET 0x20

/* Base offset for the core module */
static void __iomem *cm_base;

static const struct icst_params cp_auxosc_params = {
 .vco_max = ICST525_VCO_MAX_5V,
 .vco_min = ICST525_VCO_MIN,
 .vd_min  = 8,
 .vd_max  = 263,
 .rd_min  = 3,
 .rd_max  = 65,
 .s2div  = icst525_s2div,
 .idx2s  = icst525_idx2s,
};

static const struct clk_icst_desc cm_auxosc_desc __initconst = {
 .params = &cp_auxosc_params,
 .vco_offset = 0x1c,
 .lock_offset = INTEGRATOR_HDR_LOCK_OFFSET,
};

static const struct icst_params versatile_auxosc_params = {
 .vco_max = ICST307_VCO_MAX,
 .vco_min = ICST307_VCO_MIN,
 .vd_min  = 4 + 8,
 .vd_max  = 511 + 8,
 .rd_min  = 1 + 2,
 .rd_max  = 127 + 2,
 .s2div  = icst307_s2div,
 .idx2s  = icst307_idx2s,
};

static const struct clk_icst_desc versatile_auxosc_desc __initconst = {
 .params = &versatile_auxosc_params,
 .vco_offset = VERSATILE_SYS_OSCCLCD_OFFSET,
 .lock_offset = VERSATILE_SYS_LOCK_OFFSET,
};
static void __init cm_osc_setup(struct device_node *np,
    const struct clk_icst_desc *desc)
{
 struct clk *clk;
 const char *clk_name = np->name;
 const char *parent_name;

 if (!cm_base) {
  /* Remap the core module base if not done yet */
  struct device_node *parent;

  parent = of_get_parent(np);
  if (!parent) {
   pr_err("no parent on core module clock\n");
   return;
  }
  cm_base = of_iomap(parent, 0);
  of_node_put(parent);
  if (!cm_base) {
   pr_err("could not remap core module base\n");
   return;
  }
 }

 parent_name = of_clk_get_parent_name(np, 0);
 clk = icst_clk_register(NULL, desc, clk_name, parent_name, cm_base);
 if (!IS_ERR(clk))
  of_clk_add_provider(np, of_clk_src_simple_get, clk);
}

static void __init of_integrator_cm_osc_setup(struct device_node *np)
{
 cm_osc_setup(np, &cm_auxosc_desc);
}
CLK_OF_DECLARE(integrator_cm_auxosc_clk,
 "arm,integrator-cm-auxosc", of_integrator_cm_osc_setup);

static void __init of_versatile_cm_osc_setup(struct device_node *np)
{
 cm_osc_setup(np, &versatile_auxosc_desc);
}
CLK_OF_DECLARE(versatile_cm_auxosc_clk,
        "arm,versatile-cm-auxosc", of_versatile_cm_osc_setup);

Messung V0.5
C=96 H=100 G=97

¤ Dauer der Verarbeitung: 0.11 Sekunden  (vorverarbeitet)  ¤

*© Formatika GbR, Deutschland






Wurzel

Suchen

Beweissystem der NASA

Beweissystem Isabelle

NIST Cobol Testsuite

Cephes Mathematical Library

Wiener Entwicklungsmethode

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

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge