Author: jmcneill
Date: Wed Mar 23 19:26:53 2016
New Revision: 297215
URL: https://svnweb.freebsd.org/changeset/base/297215

Log:
  Fix support for fixed factor clocks.
   - Use a different device description for fixed and fixed factor clocks.
   - Fix a bug where the "clock-div" property was stored in the "mult" field
     of the clock definition.
   - Get the fixed factor parent clock by index instead of by name, as a
     clock-names property is not required to be present here.
  
  Reviewed by:          mmel, adrian (mentor)
  Approved by:          adrian (mentor)
  Differential Revision:        https://reviews.freebsd.org/D5703

Modified:
  head/sys/dev/extres/clk/clk_fixed.c

Modified: head/sys/dev/extres/clk/clk_fixed.c
==============================================================================
--- head/sys/dev/extres/clk/clk_fixed.c Wed Mar 23 19:24:09 2016        
(r297214)
+++ head/sys/dev/extres/clk/clk_fixed.c Wed Mar 23 19:26:53 2016        
(r297215)
@@ -150,12 +150,19 @@ struct clk_fixed_softc {
 static int
 clk_fixed_probe(device_t dev)
 {
+       intptr_t clk_type;
 
-       if (ofw_bus_search_compatible(dev, compat_data)->ocd_data != 0) {
+       clk_type = ofw_bus_search_compatible(dev, compat_data)->ocd_data;
+       switch (clk_type) {
+       case CLK_TYPE_FIXED:
                device_set_desc(dev, "Fixed clock");
                return (BUS_PROBE_DEFAULT);
+       case CLK_TYPE_FIXED_FACTOR:
+               device_set_desc(dev, "Fixed factor clock");
+               return (BUS_PROBE_DEFAULT);
+       default:
+               return (ENXIO);
        }
-       return (ENXIO);
 }
 
 static int
@@ -184,11 +191,11 @@ clk_fixed_init_fixed_factor(struct clk_f
        rv = OF_getencprop(node, "clock-mult", &def->mult,  sizeof(def->mult));
        if (rv <= 0)
                return (ENXIO);
-       rv = OF_getencprop(node, "clock-div", &def->mult,  sizeof(def->div));
+       rv = OF_getencprop(node, "clock-div", &def->div,  sizeof(def->div));
        if (rv <= 0)
                return (ENXIO);
        /* Get name of parent clock */
-       rv = clk_get_by_ofw_name(sc->dev, "clocks", &parent);
+       rv = clk_get_by_ofw_index(sc->dev, 0, &parent);
        if (rv != 0)
                return (ENXIO);
        def->clkdef.parent_names = malloc(sizeof(char *), M_OFWPROP, M_WAITOK);
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to