Home | History | Annotate | Download | only in utils
      1 /*
      2 * Copyright (c) 2016 - 2017, The Linux Foundation. All rights reserved.
      3 *
      4 * Redistribution and use in source and binary forms, with or without
      5 * modification, are permitted provided that the following conditions are
      6 * met:
      7 *   * Redistributions of source code must retain the above copyright
      8 *     notice, this list of conditions and the following disclaimer.
      9 *   * Redistributions in binary form must reproduce the above
     10 *     copyright notice, this list of conditions and the following
     11 *     disclaimer in the documentation and/or other materials provided
     12 *     with the distribution.
     13 *   * Neither the name of The Linux Foundation nor the names of its
     14 *     contributors may be used to endorse or promote products derived
     15 *     from this software without specific prior written permission.
     16 *
     17 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
     18 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
     19 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
     20 * ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
     21 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
     22 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
     23 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
     24 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
     25 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
     26 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
     27 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     28 */
     29 
     30 #include <unistd.h>
     31 #include <math.h>
     32 #include <utils/sys.h>
     33 #include <utils/utils.h>
     34 
     35 #include <algorithm>
     36 
     37 #define __CLASS__ "Utils"
     38 
     39 namespace sdm {
     40 
     41 float gcd(float a, float b) {
     42   if (a < b) {
     43     std::swap(a, b);
     44   }
     45 
     46   while (b != 0) {
     47     float tmp = b;
     48     b = fmodf(a, b);
     49     a = tmp;
     50   }
     51 
     52   return a;
     53 }
     54 
     55 float lcm(float a, float b) {
     56   return (a * b) / gcd(a, b);
     57 }
     58 
     59 void CloseFd(int *fd) {
     60   if (*fd >= 0) {
     61     Sys::close_(*fd);
     62     *fd = -1;
     63   }
     64 }
     65 
     66 DriverType GetDriverType() {
     67     const char *fb_caps = "/sys/devices/virtual/graphics/fb0/mdp/caps";
     68     // 0 - File exists
     69     return Sys::access_(fb_caps, F_OK) ? DriverType::DRM : DriverType::FB;
     70 }
     71 }  // namespace sdm
     72