# To use this file, run in your u-boot tree:
#	git config sendemail.aliasesfile doc/git-mailrc
#	git config sendemail.aliasfiletype mutt
#
# Then when sending patches, you can use:
#	git send-email --to u-boot --cc i2c ...

alias uboot  u-boot@lists.denx.de
alias u-boot uboot

# Maintainer aliases.  Use the same alias here as patchwork to keep
# things simple and easy to look up/coordinate.
alias aaribaud       Albert Aribaud <albert.u.boot@aribaud.net>
alias abiessmann     Andreas Bießmann <andreas.devel@googlemail.com>
alias abrodkin       Alexey Brodkin <alexey.brodkin@synopsys.com>
alias afleming       Andy Fleming <afleming@gmail.com>
alias ag             Anatolij Gustschin <agust@denx.de>
alias alisonwang     Alison Wang <alison.wang@freescale.com>
alias angelo_ts      Angelo Dureghello <angelo@sysam.it>
alias danielschwierzeck Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
alias galak          Kumar Gala <galak@kernel.crashing.org>
alias gruss          Graeme Russ <graeme.russ@gmail.com>
alias hs             Heiko Schocher <hs@denx.de>
alias ijc            Ian Campbell <ijc+uboot@hellion.org.uk>
alias iwamatsu       Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
alias jagan          Jagan Teki <jteki@openedev.com>
alias jasonjin       Jason Jin <jason.jin@freescale.com>
alias jhersh         Joe Hershberger <joe.hershberger@ni.com>
alias jwrdegoede     Hans de Goede <hdegoede@redhat.com>
alias kimphill       Kim Phillips <kim.phillips@freescale.com>
alias luka           Luka Perkov <luka.perkov@sartura.hr>
alias lukma          Lukasz Majewski <l.majewski@samsung.com>
alias macpaul        Macpaul Lin <macpaul@andestech.com>
alias marex          Marek Vasut <marex@denx.de>
alias masahiro       Masahiro Yamada <yamada.masahiro@socionext.com>
alias monstr         Michal Simek <monstr@monstr.eu>
alias panto          Pantelis Antoniou <panto@antoniou-consulting.com>
alias prafulla       Prafulla Wadaskar <prafulla@marvell.com>
alias bobenstein     Przemyslaw Marczak <p.marczak@samsung.com>
alias prom           Minkyu Kang <mk7.kang@samsung.com>
alias rbohmer        Remy Bohmer <linux@bohmer.net>
alias reinhardm      Reinhard Meyer <u-boot@emk-elektronik.de>
alias sbabic         Stefano Babic <sbabic@denx.de>
alias scottwood      Scott Wood <scottwood@freescale.com>
alias sjg            Simon Glass <sjg@chromium.org>
alias smcnutt        Scott McNutt <smcnutt@psyent.com>
alias sonic          Sonic Zhang <sonic.adi@gmail.com>
alias stroese        Stefan Roese <sr@denx.de>
alias trini          Tom Rini <trini@konsulko.com>
alias vapier         Mike Frysinger <vapier@gentoo.org>
alias wd             Wolfgang Denk <wd@denx.de>

# Architecture aliases
alias arch           arc, arm, avr32, bfin, m68k, microblaze, mips, nds32, nios2, powerpc, sandbox, superh, sparc, x86
alias arches         arch

alias arc            uboot, abrodkin

alias arm            uboot, aaribaud
alias at91           uboot, abiessmann
alias davinci        ti
alias imx            uboot, sbabic
alias kirkwood       uboot, prafulla, luka
alias omap           ti
alias pxa            uboot, marex
alias rmobile        uboot, iwamatsu
alias s3c            samsung
alias s5pc           samsung
alias samsung        uboot, prom
alias socfpga        uboot, marex, Dinh Nguyen <dinguyen@opensource.altera.com>
alias sunxi          uboot, ijc, jwrdegoede
alias tegra          uboot, sjg, Tom Warren <twarren@nvidia.com>, Stephen Warren <swarren@nvidia.com>
alias tegra2         tegra
alias ti             uboot, trini
alias uniphier       uboot, masahiro
alias zynq           uboot, monstr

alias avr32          uboot, abiessmann

alias bfin           uboot, vapier, sonic
alias blackfin       bfin

alias m68k           uboot, alisonwang, angelo_ts
alias coldfire       m68k

alias microblaze     uboot, monstr
alias mb             microblaze

alias mips           uboot, danielschwierzeck

alias nds32          uboot, macpaul

alias nios           uboot, Thomas Chou <thomas@wytron.com.tw>, smcnutt
alias nios2          nios

alias powerpc        uboot, afleming, kimphill, galak, stroese, wd
alias ppc            powerpc
alias mpc5xxx        uboot, wd
alias mpc8xx         uboot, wd
alias mpc82xx        uboot, wd
alias mpc83xx        uboot, kimphill
alias mpc85xx        uboot, afleming, galak
alias mpc86xx        uboot, afleming, galak
alias ppc4xx         uboot, stroese

alias sandbox        sjg
alias sb             sandbox

alias sparc          uboot, Francois Retief <fgretief@spaceteq.co.za>

alias superh         uboot, iwamatsu
alias sh             superh

alias x86            uboot, sjg, gruss

# Subsystem aliases
alias dm             uboot, sjg
alias cfi            uboot, stroese
alias dfu            uboot, lukma
alias eth            uboot, jhersh
alias kerneldoc      uboot, marex
alias fdt            uboot, sjg
alias i2c            uboot, hs
alias kconfig        uboot, masahiro
alias mmc            uboot, panto
alias nand           uboot, scottwood
alias net            uboot, jhersh
alias phy            uboot, jhersh
alias spi            uboot, jagan
alias ubi            uboot, hs
alias usb            uboot, marex
alias video          uboot, ag
alias patman         uboot, sjg
alias buildman       uboot, sjg
alias pmic           uboot, bobenstein
