tree ce23c872fda3002495354b7bb75e6399873b0f4e
parent b0378657549bbc73ac0ec6e9332fcf3c53362365
parent 16bd5865cdb3b190105db21bd22a0ca0501e7b20
author Linus Torvalds <torvalds@linux-foundation.org> 1446754427 -0800
committer Linus Torvalds <torvalds@linux-foundation.org> 1446754427 -0800
mergetag object 16bd5865cdb3b190105db21bd22a0ca0501e7b20
 type commit
 tag hsi-for-4.4
 tagger Sebastian Reichel <sre@kernel.org> 1446673269 +0100
 
 HSI changes for the v4.4 series
 
  * misc. fixes
 -----BEGIN PGP SIGNATURE-----
 Version: GnuPG v1
 
 iQIcBAABCgAGBQJWOnuqAAoJENju1/PIO/qagPoP/07OgMfIEnA3qljADn26aJNj
 b6QABcGRmXP1L12n4q0iGfr43tPSGpA/PsJ0gwRJ81NEZd/gG6nQJv1Pcvhmuywb
 ed/+HREAitx/ktWAUfLGZKpL/xkrURRuPMl5Qq5eO/FF/WhEP3aT0wbZ5yLAgQ5o
 IgmLFXR3a90C6qPOmPN5H3mOPg5Px6h4QZduaSU5f1+u/H9y3SDmM7dbA/28JaPd
 oLrp0c4BO7FkJEMwZIqTPTNJY1RJGBMkD7gMUcqE2lYj7oknD6v+SQOO+5ZShKJi
 bKQF1Sr4VviNegHyWG273LsTuzOwf/fKIvOkXsxuFmxo4rjc/a+n5dXCrp6+j5xd
 7gfHT/FSGLg219qmov3ygto3vdeICE3HIpefqbnvGUHO7zMkcgtF1bdMdxuLarXs
 A60oytiIJjzBzGpZ5KvchH27Pt+R4IHApYQfDrY041x2sI5eFffDs+N/HuY0KnRS
 QvfgBujBoCKcyLs3FX48gLtfuU7zE+BUvvlty5zdps70h5Rlp3iUgHKNrBla+oav
 5JGJHDqs0fnqGlO5HjBLWgfSSVdStowavbbxTfqk/9+iWjN4CcaSVbvCt8tq2Yuo
 U8hfhV3L+PO1swgPoW+pZhhtpfiEH3qbF+xGtC0TF9QfJIyzd6v/YXgAHcPsj+/s
 vZ4lt7JuCA+2/OpSkp4K
 =XmgF
 -----END PGP SIGNATURE-----

Merge tag 'hsi-for-4.4' of git://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-hsi

Pull HSI updates from Sebastian Reichel:
 "Misc fixes"

* tag 'hsi-for-4.4' of git://git.kernel.org/pub/scm/linux/kernel/git/sre/linux-hsi:
  hsi: controllers:remove redundant code
  hsi: correctly handle return value of kzalloc
  hsi: omap_ssi_port: Prevent warning if cawake_gpio is not defined.
  hsi: fix double kfree
  HSI: Fix a typo
