Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ;; Helpers for https://www.kernel.org/doc/Documentation/devicetree/bindings/pinctrl/fsl,imx6q-pinctrl.txt
- (setq-local lexical-binding t)
- (setq imx6q-pad-options '(
- (PAD_CTL_HYS (1 . 16))
- (PAD_CTL_PUS_100K_DOWN (0 . 14))
- (PAD_CTL_PUS_47K_UP (1 . 14))
- (PAD_CTL_PUS_100K_UP (2 . 14))
- (PAD_CTL_PUS_22K_UP (3 . 14))
- (PAD_CTL_PUE (1 . 13))
- (PAD_CTL_PKE (1 . 12))
- (PAD_CTL_ODE (1 . 11))
- (PAD_CTL_SPEED_LOW (1 . 6))
- (PAD_CTL_SPEED_MED (2 . 6))
- (PAD_CTL_SPEED_HIGH (3 . 6))
- (PAD_CTL_DSE_DISABLE (0 . 3))
- (PAD_CTL_DSE_240ohm (1 . 3))
- (PAD_CTL_DSE_120ohm (2 . 3))
- (PAD_CTL_DSE_80ohm (3 . 3))
- (PAD_CTL_DSE_60ohm (4 . 3))
- (PAD_CTL_DSE_48ohm (5 . 3))
- (PAD_CTL_DSE_40ohm (6 . 3))
- (PAD_CTL_DSE_34ohm (7 . 3))
- (PAD_CTL_SRE_FAST (1 . 0))
- (PAD_CTL_SRE_SLOW (0 . 0))
- ))
- (defun imx6q-get-option-bits (option)
- (let ((bits (car (car (cdr (assoc option imx6q-pad-options))))))
- (if bits
- bits
- (error "Can't find option %s" option))))
- (defun imx6q-get-option-shift (option)
- (let ((shift (cdr (car (cdr (assoc option imx6q-pad-options))))))
- (if shift
- shift
- (error "Can't find option %s" option))))
- (defun imx6q-get-option-value (option)
- (lsh (imx6q-get-option-bits option)
- (imx6q-get-option-shift option)))
- (defun imx6q-get-mask (&rest options)
- (let ((opt-list nil))
- (dolist (opt options)
- (push (imx6q-get-option-value opt) opt-list))
- (format "0x%x" (apply 'logior opt-list))))
- (defun imx6q-get-option-unshifted-value (opt)
- (let* ((opt-shift-negative (* -1 (imx6q-get-option-shift opt)))
- (opt-value (imx6q-get-option-value opt))
- (opt-mask (lsh opt-value opt-shift-negative)))
- opt-mask))
- (defun imx6q-bitmask (n)
- (let ((b 1))
- (dotimes (i (1- n))
- (setq b (lsh b 1))
- (setq b (logior b 1)))
- b))
- (setq imx6q-pads '(
- (HYS 1 16)
- (PUS 2 14)
- (PUE 1 13)
- (PKE 1 12)
- (ODE 1 11)
- (SPEED 2 6)
- (DSE 3 3)
- (SRE 1 0)))
- (defun imx6q-pads-get-tuple (opt)
- (cdr (assoc opt imx6q-pads)))
- (defun imx6q-pads-get-bits (opt)
- (car (imx6q-pads-get-tuple opt)))
- (defun imx6q-pads-get-shift (opt)
- (car (cdr (imx6q-pads-get-tuple opt))))
- (defun imx6q-pads-get-shift-negative (opt)
- (* -1 (imx6q-pads-get-shift opt)))
- (defun imx6q-bitmask (n)
- (let ((b 1))
- (dotimes (i (1- n))
- (setq b (lsh b 1))
- (setq b (logior b 1)))
- b))
- (defun imx6q-pads-get-bitmask (opt)
- (imx6q-bitmask (imx6q-pads-get-bits opt)))
- (defun imx6q-pads-get-option-value (opt mask)
- (logand (lsh mask (imx6q-pads-get-shift-negative opt)) (imx6q-pads-get-bitmask opt)))
- (defun imx6q-get-mask-values (mask)
- (dolist (v imx6q-pads)
- (let ((key (nth 0 v)))
- (princ (format "%s: %s\n" key (imx6q-pads-get-option-value key mask))))))
- (provide 'imx6q-pads)
Advertisement
Add Comment
Please, Sign In to add comment